首页 文章

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

提问于
浏览
1

我试图在终端的远程机器上运行可执行文件 - 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 found](https://stackoverflow.com/questions/5216399/usr-lib-libstdc-so-6-version-glibcxx-3-4-15-not-found)或[How to fix: /usr/lib/libstdc++.so.6: versionGLIBCXX_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

    将环境变量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 将路径烘焙到可执行文件中 . 尝试运行可执行文件时,它在运行时不执行任何操作 . 如果使用它,则需要将其设置为远程计算机上包含 libstdc++.so.6 文件的目录 . 同样,它需要设置为目录,而不是文件的路径 .

    LD_PRELOAD 再次变得不同,几乎肯定不是你想要的 . 您可以使用它来强制在可执行文件运行时加载特定的共享库 . 这可用于预加载较新的libstdc,但通常最好使用 LD_LIBRARY_PATH 在运行时设置路径,或者 LD_RUN_PATH 在链接时设置路径 .

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

    你展示的命令是无稽之谈,他们不会试图从无到有创建一个可执行文件 . 这就是为什么你得到错误 undefined reference to "main"

    对于您的场景,我建议使用 LD_LIBRARY_PATH .

相关问题