2015-06-27 64 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中添加文件也是一個好主意! –

相關問題