2016-03-30 41 views
0

我有一些提升相關的代碼我想要編譯爲一個動態庫:刪除庫的依賴

g++ -Wall -fPIC -o myclass.o -c myclass.cpp 
g++ -shared -Wl,-soname,myclass.so.1 -o lib/myclass.so.1 myclass.o -lc 

但是編譯我發現還是有提升的依賴(我與ldd檢查)後

ldd lib/myclass.so.1 
linux-vdso.so.1 (0x00007fff741fd000) 
libboost_system.so.1.60.0 => /usr/lib/libboost_system.so.1.60.0 (0x00007f7945649000) 
libboost_serialization.so.1.60.0 => /usr/lib/libboost_serialization.so.1.60.0 (0x00007f794540b000) 
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f7945089000) 
libm.so.6 => /usr/lib/libm.so.6 (0x00007f7944d83000) 
libc.so.6 => /usr/lib/libc.so.6 (0x00007f79449e2000) 
/usr/lib64/ld-linux-x86-64.so.2 (0x00005590726ae000) 
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f79447cc000) 
librt.so.1 => /usr/lib/librt.so.1 (0x00007f79445c3000) 
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f79443a6000) 

是否有任何方法可以刪除對我的共享庫的增強動態依賴關係(打包我在.so中調用的對象的當前boost版本)?

+0

您是否嘗試過'ldd -v'來檢查鏈接到Boost的鏈接是否有鏈接? – jotik

回答

0

你所做的一切都是正確的。在C++中發生的事情很容易被遺忘,所以重新編譯一些東西。刪除所有.o文件(及其他內容)和

0

g++ -shared -Wl,-soname,myclass.so.1 -o lib/myclass.so.1 myclass.o -lc

編譯我注意到仍有提升依賴

你的意思是「鏈接後,」但是經過再次嘗試。

還有沒辦法你給的鏈接命令產生一個依賴於boost的庫,除非你的g++實際上是別名的別名。

如果是別名,請不要使用它。如果您有遭到黑客入侵的g++或者您修改了specs文件,請不要這樣做。

如果您提供的命令不是您使用的實際命令,請向我們顯示實際命令(並從中刪除提升)。

+0

我使用該命令特別通過makefile,並在生成的.so文件上運行'ldd'。庫本身和鏈接到它的二進制文件都顯示提升依賴關係。 – joaocandre