libstdc ++。so.6:找不到版本 - 没有管理员权限

时间:2016-06-07 00:25:00

标签: linux unix gcc remote-server libstdc++

我正在尝试在终端的远程计算机上运行可执行文件 - SaTScanBatch,SaTScan软件的可执行文件。

这是我得到的错误

/usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found

问题类似于: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not foundHow to fix: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found

我的情况有所不同,我没有管理员权限,所以我无法在usr / lib文件中添加库。我在远程存储库中下载了libstdc ++。6.0.15,我想用它来执行我的文件。

以下是我尝试过的可能性

i)将环境变量LD_LIBRARY_PATH或LD_RUN_PATH或LD_PRELOAD修改为libstdc ++。so.6.0.15的路径。 - >没有改变什么

ii)以静态方式包含库

gcc SaTScanBatch -static-libstdc++

- > -static选项无法识别,我猜远程机器的GCC版本太旧了。

iii)尝试将文件链接到其他库:

gcc SaTScanBatch -L /path/library -l stdc++

或类似地

gcc SaTScanBatch -Wl,-rpath,path/to/library

- >错误

/usr/bin/ld: warning: Cannot create .eh_frame_hdr section, --eh-frame-hdr ignored.
/usr/bin/ld: error in SaTScanBatch64(.eh_frame); no .eh_frame_hdr table will be created.
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../lib64/crt1.o: In function _start:
(.text+0x20): undefined reference to "main"
collect2: ld returned 1 exit status

iv)使用PatchElf链接文件和库 - >我无法安装PatchElf,因为没有管理员权限

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

  

将环境变量LD_LIBRARY_PATH或LD_RUN_PATH或LD_PRELOAD修改为libstdc ++。so.6.0.15的路径。 - >没有改变什么

你究竟尝试了什么?

LD_LIBRARY_PATH应设置为包含新libstdc++.so.6而不是文件本身的目录,并且您需要export环境变量,以便子进程可以使用它,而不仅仅是你的shell。你需要一个从libstdc++.so.6libstdc++.so.6.0.15的符号链接,因为动态加载器会查找该名称,而不是libstdc++.so.6.0.15

LD_RUN_PATH在链接期间使用来烘焙可执行文件的路径。尝试运行可执行文件时,它在运行时不执行任何操作。如果您使用它,则需要将其设置为包含远程计算机上<{1}}文件的目录。同样,它需要设置为目录,而不是文件的路径。

libstdc++.so.6又有所不同,几乎肯定不是你想要的。您可以使用它来强制在可执行文件运行时加载特定的共享库。这可用于预加载较新的libstdc ++,但通常最好使用LD_PRELOAD在运行时设置路径,或LD_LIBRARY_PATH在链接时设置路径。< / p>

  

尝试将文件链接到其他库:

您展示的命令是无意义的,它们不包含链接中的任何对象,因此您尝试从无到有创建可执行文件。这就是您收到错误LD_RUN_PATH

的原因

对于您的方案,我建议您使用undefined reference to "main"