我构建并安装了gcc-4.6.4到我的家庭目录(我没有根源)。 当我用g ++将一些目标文件链接到一个可执行文件时,它链接了“错误的”libstdc ++。so.6。
它不使用位于安装目录中的新版本,而是使用系统中的新版本。
有没有办法为库指定独占搜索路径?
我的bashrc:
PATH=$PATH:/home/testuser/selfcompiled/gcc-4.6.4/bin:/usr/local/cuda/bin
export PATH
C_INCLUDE_PATH=/home/testuser/selfcompiled/gcc-4.6.4/include
export C_INCLUDE_PATH
CPLUS_INCLUDE_PATH=/home/testuser/selfcompiled/gcc-4.6.4/include
export CPLUS_INCLUDE_PATH
LIBRARY_PATH=/home/testuser/selfcompiled/gcc-4.6.4/lib:/home/testuser/selfcompiled/gcc-4.6.4/lib64/lib
export LIBRARY_PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/local/cuda/cudaprof/bin:/home/testuser/selfcompiled/gcc-4.6.4/lib:/home/testuser/selfcompiled/gcc-4.6.4/lib64/lib
export LD_LIBRARY_PATH
GCC_EXEC_PREFIX=/home/testuser/selfcompiled/gcc-4.6.4/lib/gcc/
export GCC_EXEC_PREFIX
COMPILER_PATH=/home/testuser/selfcompiled/gcc-4.6.4/bin/:/home/testuser/selfcompiled/gcc-4.6.4/libexec/:/home/testuser/selfcompiled/gcc-4.6.4/lib/gcc/
export COMPILER_PATH
即使我使用本地libstdc ++。so.6通过g ++ -L ....指定dir,位于/ usr / ...中的目录也会根据ldd链接到可执行文件。
非常感谢!
答案 0 :(得分:1)
链接时没有错误(或者您将链接器错误发送到旧库版本中不存在的符号)。
这是运行时的事情。这样:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/local/cuda/cudaprof/bin:/home/testuser/selfcompiled/gcc-4.6.4/lib:/home/testuser/selfcompiled/gcc-4.6.4/lib64/lib
export LD_LIBRARY_PATH
应该是
LD_LIBRARY_PATH=/home/testuser/selfcompiled/gcc-4.6.4/lib:/home/testuser/selfcompiled/gcc-4.6.4/lib64/lib:$LD_LIBRARY_PATH:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/local/cuda/cudaprof/bin
export LD_LIBRARY_PATH
可执行加载程序需要首先查看新库,然后再查看旧库。当然,有很强的二进制兼容性,所以如果没有使用新的符号,旧的库将会很好。
答案 1 :(得分:0)
我猜你已经构建了64位可执行文件。这条路:
/home/testuser/selfcompiled/gcc-4.6.4/lib64/lib
看起来不对,应该是:
/home/testuser/selfcompiled/gcc-4.6.4/lib64
要使用它,请设置LD_LIBRARY_PATH
,或者更好地使用-Wl,-rpath=/home/testuser/selfcompiled/gcc-4.6.4/lib64