下面是一個例子來說明我的問題:LD找不到LIB鏈接
ld -Lpath1 -Lpath2 -lA -lB -Xlinker -T -Xlinker \
-W1,-rpath,/usr/local/lib -l-o target
ld: cannot find -lA
collect2: ld returned 2 exit status
兩個路徑1和路徑2是相對路徑,我可以找到庫,根據勞工處的PWD,所以爲什麼ld輸出這個錯誤消息?
任何人都可以給我一些建議來調試這個問題嗎?
我想念一些,在一個名爲rt的庫之前有一個「-static」。
根據你的建議,我嘗試讓gcc驅動ld做鏈接過程。 gcc A.o B.o -mabi = 64 -static -lrt -Xlinker -T -Xlinker ld.script -W1,-rpath,/ usr/local/lib -lmemdbg -o目標 它不起作用。
,然後我刪除「-static」選項,-lpthread後的另一個動態LIB(因爲室溫取決於並行線程被發現當我刪除「-static」)
GCC敖柏-mabi = 64 -lrt -lpthread -Xlinker -T -Xlinker ld.script -W1,-rpath,/ usr/local/lib -lmemdbg -o目標 這次,對象成功鏈接在一起。
然後我試着弄清楚爲什麼「靜態」命令不能通過向gcc 傳遞「-v」來工作。出現了一些「-L」選項,並在搜索列表中找到名爲librt.a的lib。
我真的很困惑。 GCC的版本是4.3
對不起,我不小心,有 「-l-O」 應爲 「-lC -o」,C是一個共享的庫名。爲什麼我沒有貼實編譯輸出的原因是工作環境是從網上絕緣。 這個問題是由交叉編譯上下文引起的,當我嘗試從CPU提供者升級sdk時,包括工具鏈和其他一些需要重新編譯的東西。 – Wangrui 2010-07-29 03:40:26
@joeys:你是否包含正確的標誌來告訴加載器這是一個交叉編譯(交叉鏈接)?坦率地說,這是爲什麼我會推薦使用編譯器而不是原始鏈接程序的另一個例子 - 讓所有正確的標記都很難。編譯器GCC?如果是這樣,你有沒有嘗試用''-v''選項進行簡單的交叉編譯(包括鏈接階段),以查看傳遞給鏈接器的選項? – 2010-07-29 16:49:02