C++ 在我自己构建GCC之后,如何配置共享库搜索路径?
我刚刚在Ubuntu 14.04上构建了GCC 5.1,默认为GCC 4.8。当我尝试用它构建东西时,我发现C++ 在我自己构建GCC之后,如何配置共享库搜索路径?,c++,c,gcc,C++,C,Gcc,我刚刚在Ubuntu 14.04上构建了GCC 5.1,默认为GCC 4.8。当我尝试用它构建东西时,我发现ld将使用默认的libstdc++而不是新构建的libstdc++。 以下是输出: drizzlex@dx~/试验 $g++hello.cpp drizzlex@dx~/试验 $ldd a.out linux vdso.so.1=>(0x00007ffde0d25000) libstdc++.so.6=>/usr/lib/x86_64-linux-gnu/libstdc++.so.6(0x
ld
将使用默认的libstdc++而不是新构建的libstdc++。
以下是输出:
drizzlex@dx~/试验
$g++hello.cpp
drizzlex@dx~/试验
$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_.so.1=>/lib/x86_64-linux-gnu/libgcc_.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\u LIBRARY\u PATH=/usr/local/lib64/
,它会找到正确的
drizzlex@dx~/试验
$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_.so.1=>/usr/local/lib64/libgcc_.so.1(0x00007f458385000)
libc.so.6=>/lib/x86_64-linux-gnu/libc.so.6(0x00007F4583480000)
/lib64/ld-linux-x86-64.so.2(0x00007F4584100E000)
我想知道我应该怎么做才能使它正确?因为我知道set LD_LIBRARY_PATH不是最佳选择。对于使用g++5.1构建,请使用以下方法:
$ g++5.1 hello.cpp -Wl,-rpath,/usr/local/lib64
您不需要设置LD_LIBRARY_路径
这是从
rpath是编程中的一个术语,指的是运行时搜索路径
在可执行文件或库中硬编码,在动态过程中使用
链接以查找可执行文件或库所需的库
在/etc/ld.so.conf.d/下,有一些属于默认gcc的conf文件,我应该为我的gcc 5.1自己写一个吗?或者我应该编辑现有的?还是什么?你在哪里安装了gcc-5.1?我指的是
--前缀选项。为什么LD\u LIBRARY\u路径不是最佳选择?无论如何,您还应该确保指向更新的include路径(例如通过设置CPLUS_include_path),您可以使用/usr/local/lib64
添加一个新文件/etc/ld.conf.d/gcc-5.1.conf
,然后运行ldconfig
。我发现libc与gcc是分开的,而libstdc++不是?因为我发现有两个libstdc++,libstdc++.so.6.0.19和libstdc++.so.6.0.21,我认为它们分别与GCC4.8和5.1一起提供。但是,我认为只有一个libc,即/lib/x86_64-linux-gnu/libc.so.6。是的,libc与gcc是分开的,例如在安装了操作系统的linux libc上。libstdc++与g++一起提供,它是g++的一部分:-