2015-06-27 42 views
0

我刚刚在Ubuntu 14.04上构建了GCC 5.1,默认情况下gcc为4.8。当我尝试使用它构建东西时,我发现ld将使用默认的libstdC++而不是新构建的。 这里是输出:如何在自己构建GCC之后配置共享库搜索路径?

[email protected] ~/test 
$ g++ hello.cpp 

[email protected] ~/test 
$ ldd a.out 
    linux-vdso.so.1 => (0x00007ffde0d25000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6  (0x00007fa181ad2000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa1817cc000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa1815b5000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa1811f0000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007fa181dfd000) 

如果我用$ export LD_LIBRARY_PATH=/usr/local/lib64/,它会找到合适的人。

[email protected] ~/test 
$ ldd a.out 
    linux-vdso.so.1 => (0x00007fffeeaf5000) 
    libstdc++.so.6 => /usr/local/lib64/libstdc++.so.6 (0x00007f4583d92000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4583a67000) 
    libgcc_s.so.1 => /usr/local/lib64/libgcc_s.so.1 (0x00007f4583850000)  
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f458348b000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007f458410e000) 

我想知道该怎么做才能使其正确?由于我知道设置LD_LIBRARY_PATH并不是最佳选择。

+0

在/etc/ld.so.conf.d/下,有一些conf文件属于默认的gcc,我应该自己写一个gcc 5.1吗?或者我应该编辑现有的?或者是什么? –

+0

你在哪里安装gcc-5.1?我的意思是'--prefix'选项。 –

+0

为什么LD_LIBRARY_PATH不是最佳选择?无论如何,你还应该确保指向更新的包含路径(例如通过设置CPLUS_INCLUDE_PATH) –

回答

0

对于G大楼++ 5.1使用本:

$ g++5.1 hello.cpp -Wl,-rpath,/usr/local/lib64 

而且你不需要设置LD_LIBRARY_PATH。

这是https://en.wikipedia.org/wiki/Rpath

rpath的是在编程术语,它指的是运行时的搜索路径 硬编码在可执行文件或库中,在动态 链接用来寻找库可执行文件或库需要。

+0

我发现libc与gcc是分开的,但libstdC++不是?因为我发现有两个libstdC++,libstdC++。so.6.0.19和libstdC++。so.6.0.21,我认为它们分别带有gcc 4.8和5.1。但是,我认为只有一个libc,即/lib/x86_64-linux-gnu/libc.so.6。 –

+0

是的,libc与gcc是分开的,例如在安装了OS的Linux libc上。 libstdC++自带g ++,它是其中的一部分: - https://gcc.gnu.org/libstdc++/ –

+0

在/etc/ld.so.conf.d中添加文件也是一个好主意! –

相关问题