2012-06-19 52 views
3

我有一些源文件我想聚集成一個.a文件。我使圖書館用命令在unix上製作一個庫時,除了「ar rcs」之外什麼都需要?

ar rcs libcathat.a thing1.o thing2.o fish.o 

然後我嘗試用相同的編譯器鏈接到這個庫我用來做.o文件(G ++):

g++ -L/path/to/cathat -lcathat seuss.o -o seuss 

但是,這會產生錯誤,當我嘗試使用thing1.cpp定義函數(並在thing.o代表理論)的形式爲:

/path/seuss.cpp:46: undefined reference to `redFishBlueFish(int, char**)' 

有沒有別的東西,我需要d o轉至.a文件以使其能夠鏈接到它?

+2

你錯過了紅色的魚和藍色的魚! –

+1

@Jonathan Leffler:添加了魚參考資料:) – Dan

回答

4

嘗試移動連接語句結尾:

g++ seuss.o -o seuss -L/path/to/cathat -lcathat 

如果不工作,確保這些符號實際上是在存檔:

nm libcathat.a 
3

通常情況下,你不」在大多數現代版本的Unix上都不需要做任何事情。

在一些主要是較舊版本的Unix上,有必要在庫上使用ranlib來添加查找表,以便鏈接器能夠快速查找符號。幾乎所有現代版本的ar都會自動執行此操作。需要ranlib是第7版UNIX™的'過去不好的日子'的宿醉。


出於某種原因,我現在不能找到,我是建立在Mac OS X 10.7.4檔案與ranlib了。我一定有這樣做的理由,但這個理由現在似乎是無關緊要的—歸檔庫似乎工作正常,沒有ranlib在Mac OS X 10.7.4,至少對於單一架構。我確實發現了我在2004年7月做出的一項變更,將ranlib重新納入make計劃,但簽入說明並未說明爲什麼我進行了更改。我已更新規則定義文件,因此不再使用ranlib

相關問題