本地gcc构建链接系统动态库

时间:2013-04-19 10:28:07

标签: gcc linker

我构建并安装了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链接到可执行文件。

非常感谢!

2 个答案:

答案 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/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