【问题标题】:local gcc build links system dynamic libraries本地 gcc 构建链接系统动态库
【发布时间】:2013-04-19 10:28:07
【问题描述】:

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

非常感谢!

【问题讨论】:

  • 它是否链接错误的库,或者当您运行构建的程序时它是否使用了错误的库?

标签: gcc linker


【解决方案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

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

【讨论】:

  • 或者,您可以在链接时使用-Wl,-rpath,/home/testuser/selfcompiled/gcc-4.6.4/lib,-rpath,/home/testuser/selfcompiled/gcc-4.6.4/lib64/lib
【解决方案2】:

我猜你已经构建了 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    相关资源
    最近更新 更多