0

我在我的主目录中构建并安装了 gcc-4.6.4(我没有 root 权限)。当我使用 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

即使我通过 g++ -L .... 使用本地 libstdc++.so.6 指定目录,位于 /usr/... 中的目录也会根据 ldd 链接到可执行文件。

非常感谢!

4

2 回答 2

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

可执行加载器需要先查看您的新库,然后再查看旧库。当然,有很强的二进制兼容性,所以如果不使用新符号,旧的库就可以了。

于 2013-04-19T11:27:55.760 回答
0

我猜你已经构建了 64 位可执行文件。这条路径:

/home/testuser/self‌​compiled/gcc-4.6.4/lib64/lib

看起来不对,应该是:

/home/testuser/self‌​compiled/gcc-4.6.4/lib64

要使用它,请设置LD_LIBRARY_PATH或更好地使用-Wl,-rpath=/home/testuser/self‌​compiled/gcc-4.6.4/lib64

于 2013-04-20T03:40:58.810 回答