【发布时间】:2015-04-24 04:18:45
【问题描述】:
我最近安装了gcc 4.9.2,发现与libs链接时出现问题。
搜索路径的输出:
install: /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/
programs: =/usr/libexec/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/libexec/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/libexec/gcc/x86_64-unknown-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/
libraries: =/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/../lib64/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../lib64/:/lib/x86_64-unknown-linux-gnu/4.9.2/:/lib/x86_64-linux-gnu/:/lib/../lib64/:/usr/lib/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../:/lib/:/usr/lib/
真的,问题是这样的:
/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/
我需要更改这两个库的顺序(使 lib64 具有更高的搜索优先级),因为两个目录都有 libstdc++.so.6,我需要使用 lib64 文件夹中的那个。
我该怎么做?
请不要:
1,建议我更改 LD_LIBRARY_PATH 以明确包含 libstdc++.so.6,因为我确信 x86_64-linux-gnu 文件夹中还有其他东西是 lib64 文件夹中的旧版本 - 我从旧版本。
2,建议我在 g++ -L 选项中明确包含 lib64/libstdc++.so.6。
非常感谢。
/************************编辑了解更多信息****************** ******/
根据下面的要求,这里有一些关于配置和安装的更多细节(我从 gcc.gnu.org 下载了 4.9.2 源,解压并在 4.9.2 顶级文件夹中启动):
mkdir ../gcc-build &&
cd ../gcc-build &&
../gcc-4.9.2/configure \
--prefix=/usr \
--libdir=/usr/lib \
--enable-shared \
--enable-threads=posix \
--enable-__cxa_atexit \
--disable-multilib \
--with-system-zlib \
--enable-languages=c,c++ &&
make
【问题讨论】:
-
你是如何安装 GCC 的(你安装了一些软件包吗?)?在哪个 Linux 发行版上?你自己编译的吗?你是怎么
.../configure它的?请编辑您的问题以提供更多详细信息! -
@BasileStarynkevitch 你好,Basile。我已经用更多细节更新了我的问题。 Linux 发行版是 Kali。
-
您的系统
gcc是如何配置的?尝试例如gcc-4.8 -v? -
您在哪个系统(例如,什么 Linux 发行版和版本)上执行此操作?您可能已经将系统损坏到需要重新安装的程度!
-
@BasileStarynkevitch Kali linux,最新的 1.0.7(作为早期版本安装,我在安装 gcc 4.9.2 之前将其升级到最新版本)。我安装的 gcc 确实有些奇怪。作为一种临时解决方法,我在 LD_LIBRARY_PATH 中设置了 lib 路径,它工作得很好——直到我用 gdb 调试它。我尝试使用 -g 进行编译,并在另一个实验中使用 -ggdb。在这两种情况下,都没有为当前堆栈中的任何变量找到符号。然后我将 gdb 更新到最新的 7.9 并没有变得更好。我确定我的 gcc 安装有问题。但是怎么会呢?
标签: c++ gcc linker shared-objects g++4.9