在gcc(g ++)下,我編譯了一個靜態.a(稱為some_static_lib.a)庫。我想將此.a文件鏈接(是正確的短語嗎?)到libsomeDyn.so我正在構建的另一個動態庫(稱為)中。雖然可以.so編譯,但我看.a不到.so使用nm命令的內容:/ usr / bin / g ++ -fPIC -g -O2 -Wall -Werror -pipe -march = pentium3 -mtune = prescott -MD -D_FILE_OFFSET_BITS = 64 -DLINUX -D_GNU_SOURCE -D_THREAD_SAFE -I ../..../。 ./../../../../ -I ../../../../../../../..// libraries -Wl,-rpath,/ usr / lib -o libsomeDyn.so some.o another.o some_static_lib.a -shared -Wl -x -Wl,-soname,libsomeDyn.so我看不出在功能some_static_lib.a下libsomeDyn.so。我究竟做錯了什么?
3 回答

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
靜態庫在鏈接時有特殊的規則。如果靜態庫中的對象提供了未解析的符號,則該對象只會添加到二進制文件中。
在Linux上,您可以使用--whole-archive鏈接器選項更改該行為:
g++ -Wl,--whole-archive some_static_lib.a -Wl,--no-whole-archive
添加回答
舉報
0/150
提交
取消