2010-05-18 90 views
0

我對MAC操作系統有點新,但在MAC OS X上使用g ++構建cpp應用程序時,出現了鏈接器的奇怪錯誤。在MAC操作系統上的鏈接錯誤

首先在一步我創建一個庫,使用從cpp源生成的幾個對象文件,然後使用ar rvs命令創建單個存檔。

如果我將此庫鏈接到另一個使用庫提供的某些類的cpp應用程序,它將無法在鏈接中獲取某些符號並引發未定義的符號錯誤。

我知道,我可以使用nm在庫中看到這些符號。並且簽名和字符串完全匹配它在.a文件中的方式。

還有很多其他的符號,這個庫提供並獲得鏈接時識別。用於連接

選項是

 g++-framework IOKit -framework Carbon -L <> -l<lib>-L -l<lib> -o exe ./obj.o 

和其他使用-L

對於其他庫的若干路徑我不是MAC專家,但是從成員的任何建議將是明顯的。

預先感謝

-brij

+0

複製並粘貼實際的命令行和生成的錯誤消息 – 2010-05-18 18:09:59

回答

0

連接時,您需要的庫之前把目標文件(obj.o)。

其原因在於,在處理對象時,鏈接器會保留未定義符號的列表。當它處理一個庫時,它會添加它在庫中找到的所有當前未定義的符號(從技術上說,它在庫中的對象級別上工作)。通過首先放置庫,在處理它們時不會定義任何符號,因此不會添加庫中的對象。