簡體   English   中英

OS X上的Gcc:體系結構x86_64的未定義符號

[英]Gcc on OS X: Undefined symbols for architecture x86_64

我正在編寫一個具有多個子目錄的應用程序。 我創建了一個Makefile結構,使子目錄編譯該文件並執行“ar rvs”和“ranlib libxxx.a”以創建存檔到父目錄中進行鏈接。

但是“ld”命令遇到以下問題。

ld: warning: ignoring file ./libxxx.a, file was built for archive which is not
the architecture being linked (x86_64):
./libxxx.a Undefined symbols for architecture x86_64:

我在Mac OS X 10.10.1上使用gcc

我讀了很多帖子。 我試過“gcc -arch i386”,然后我遇到了i386的同樣錯誤

Undefined symbols for architecture i386:

我安裝了gcc-4.9.2並嘗試使用它而不是默認的gcc,沒有運氣。 我嘗試使用x86_64-apple-darwin14.0.0-g ++ - 4.9.2,這也沒有幫助。

您看到的錯誤意味着您在構建中混合了i386和x86_64代碼,並且您需要保持一致。 除非有令人信服的理由不這樣做(我很想知道它是什么),你應該只為64位編譯所有內容。 在Mac上使用gcc ,這通常是默認設置,但您可以通過在編譯中添加-m64標志來強制它。 一種方法是在make命令行上設置CC="gcc -m64" ; 還有其他更好的方法,但細節取決於你的makefile內容。

要解決:首先,刪除你在項目區域中構建的所有庫和目標代碼(如果你寫了一個clean目標,也許make clean會這樣做)。 然后,取消CC或其標志的值(最終CFLAGS ,但是如何構建CFLAGS取決於makefile ),以便強制執行64位編譯。 然后確保你在所有編輯中都使用它。 如果你沒有看到-m64 ,那你就遇到了問題。

如果必須使用32位,請將-m32替換為-m64

上面的討論假設您正在使用gcc來運行ld命令。 如果你不是,那么在你使用gcc運行ld命令之前,你是獨立的。 在我看來,你有更好的事情要做,而不是弄清楚如何正確運行ld命令; 我當然有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM