這個問題的標題是exact dupe,但在這個問題的答案不幫助我。將靜態庫轉換爲共享庫(從libsome.a創建libsome.so):我的符號在哪裏?
我有一堆裝在一個靜態庫的目標文件:
% g++ -std=c++98 -fpic -g -O1 -c -o foo.o foo.cpp
% g++ -std=c++98 -fpic -g -O1 -c -o bar.o bar.cpp
% ar -rc libsome.a foo.o bar.o
我想從libsome.a,而不是目標文件libsome.so產生,但庫是真的準系統:
% g++ -std=c++98 -fpic -g -O1 -shared -o libsome.so libsome.a
% nm -DC libsome.so
0000xxxx A _DYNAMIC
0000xxxx A _GLOBAL_OFFSET_TABLE_
w _Jv_RegisterClasses
0000xxxx A __bss_start
w __cxa_finalize
0000xxxx A _edata
0000xxxx A _end
0000xxxx T _fini
0000xxxx T _init
靜態庫是好的,或者至少我完全能夠將它鏈接到一個可執行文件,並讓它運行所包含的功能。另外,如果我從foo.o和bar.o創建libsome.so,一切都很好。
+1你走了。我嘗試了「man ld」並錯過了這一點。 – 2010-02-03 17:55:14
謝謝,這就是它!我已經在ld頁面上下搜索,但不知何故錯過了這個選項。 – 2010-02-03 18:10:19
現在,如果只有這個優秀的答案也表明如何用CMake項目來設置它!謝謝 – 2011-03-10 08:21:50