提问人:NCLibardi 提问时间:7/6/2023 更新时间:7/6/2023 访问量:38
在目标计算机中运行应用程序时出现的问题
Problems when running application in target machine
问:
我有一个使用 c++20 std 的 c++ 项目,并使用 gcc11 在我的本地机器中编译(目标机器有 gcc8.5)。然后,我将可执行文件传输到目标计算机,并使用 ldd 命令检查目标计算机中的可执行文件是否具有所有必要的共享库。显然,输出如下:
./tests_ss_vs_ms: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by ./tests_ss_vs_ms)
./tests_ss_vs_ms: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by ./tests_ss_vs_ms)
./tests_ss_vs_ms: /lib64/libc.so.6: version `GLIBC_2.33' not found (required by ./tests_ss_vs_ms)
linux-vdso.so.1 (0x00007ffdfcff5000)
libgomp.so.1 => /lib64/libgomp.so.1 (0x00007f4aa5717000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4aa5395000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4aa4fd0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4aa6139000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4aa4dcc000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4aa4bac000)
到目前为止,我尝试过:
- 使用 gcc8.5 进行交叉编译。问题:我的项目使用了 gcc8.5 无法识别的概念,因此会出现编译错误。
- 通过设置一些 cmake 环境变量(如: 或
.问题:libm.so 和 libc.so 仍然是动态构建的,使用给我带来了问题,因为它试图静态链接 libgomp.so(libc.so 和 libm.so 有静态版本,但 libgomp.so 没有)。set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so")
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
set(CMAKE_EXE_LINKER_FLAGS 'static')
-static
- 最后,将 libc.so.6 和 libm.so.6 传输到我的目标机器并使用LD_PRELOAD技巧。问题:在运行应用程序时会导致分段错误,当我在本地计算机中运行它时不会发生这种情况。
OBS:我只有权限在目标机器上运行东西,因此不允许在目标机器上更新 libc.so 和 libm.so。
有人知道我能做什么吗?提前致谢!
答: 暂无答案
评论