2012-01-22 71 views
1

我想在amd64機器上建立boost 1.48但是由於重定位錯誤而沒有建立共享庫。我認爲這是因爲-fPIC,這就是原因,但無法解決這個問題。未能建立共享庫提升1.48

更具體地說,這裏是我得到的,從樹幹上的提升,

./b2 

在/ usr/bin中/ LD:/usr/lib/gcc/x86_64-linux-gnu/4.4.5 /libstdc++.a(codecvt.o):重定位R_X86_64_32S針對`vtable for std :: codecvt'無法在製作共享對象時使用;與-fPIC /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a重新編譯:看不懂的符號:壞值 collect2:LD返回1個退出狀態

我也嘗試了這些

./bjam -d2 
./bjam address-model=64 cxxflags=-fPIC 

的解釋/在這裏

http://boost.2283326.n4.nabble.com/fPIC-option-for-boost-td3176976.html

討論卻沒有幫助。我無法設法構建使用boostrap.sh配置的共享庫。

回答

0

我有一個類似的問題,試圖在標準的debian擠壓安裝上構建mosh-1.2.2。我下面的工作:

# cd /usr/lib/gcc/x86_64-linux-gnu/4.4.5 
# rm libstdc++.so 
# ln -s ../../../x86_64-linux-gnu/libstdc++.so.6 libstdc++.so 

爲了更詳細的解釋,現有的符號鏈接是指向一個不存在的文件:

# cd /usr/lib/gcc/x86_64-linux-gnu/4.4.5 
# ls -l libstdc++.so 
.. 
lrwxrwxrwx 1 root root  23 May 3 2011 libstdc++.so -> ../../../libstdc++.so.6 
.. 

我找到了正確的文件位置

# dpkg -S 'libstdc' 
.. 
libstdc++6: /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
.. 

然後按照第一個代碼段中所述修復符號鏈接。

編譯期間我得到的錯誤是:

make[3]: *** [mosh-client] Error 1 
make[2]: *** [all-recursive] Error 1 
make[1]: *** [all-recursive] Error 1 
make: *** [all] Error 2 
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a(functexcept.o): relocation R_X86_64_32 against `std::bad_typeid::~bad_typeid()' can not be used when making a shared object; recompile with -fPIC 
/usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a: could not read symbols: Bad value 

不知道這個特殊的Debian擠壓服務器如何打破。我一直在編寫其他擠壓系統,沒有麻煩。