我創建了一個靜態庫libstuff.a
,其中gcc
和ar
。我已經安裝了/custom/lib/dir/
的庫和/custom/include/dir/
的頭文件。當我嘗試編譯另一個應用程序對存檔時,我遇到了問題。編譯時遇到靜態庫問題
我想編譯的應用程序基本上使用gcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff
。
當我嘗試編譯時,我得到關於我在stuff.h
中聲明的函數的錯誤,並在stuff.c
中定義。
main.c:51: undefined reference to `stuff_init'
collect2: error: ld returned 1 exit status
如果我從/custom/lib/dir/
刪除libstuff.a
編譯器會抱怨/usr/bin/ld: cannot find -lstuff
。如果我把它放回去,它不會抱怨。所以它正確地找到了檔案。
如果我從main.c
中刪除#include "stuff.h"
這行代碼,gcc抱怨stuff_init
未定義,所以它正確地找到了標題。
如果我運行nm libstuff.a
,則輸出包括0000000000000000 T stuff_init
。所以該功能是在存檔文件中定義的。
那麼我做錯了什麼?
共享庫不是用'àr(1)'創建的,'libfoo.a'是一個* static *庫。檢查你的構建說明。 – vonbrand
對不起,我的意思是說靜態而不是共享。謝謝:) – Josh
你真的應該顯示你的確切和完整的鏈接命令行。 「基本上」很好,但不夠具體。 –