undefined reference問題總結

2022-08-01 11:00:09 字數 1152 閱讀 8213

最近在linux下程式設計發現乙個詭異的現象,就是在鏈結乙個靜態庫的時候總是報錯,類似下面這樣的錯誤:

(.text+0x13): undefined reference to `func' 

關於undefined reference這樣的問題,大家其實經常會遇到,在此,我以詳細地示例給出常見錯誤的各種原因以及解決方法,希望對初學者有所幫助。

測試**如下:

先把test.c編譯成靜態庫(.a)檔案

gcc -c test.c  

ar -rc test.a test.o 

至此,我們得到了test.a檔案。我們開始編譯main.c

gcc -c main.c 

這時,則生成了main.o檔案,然後我們再通過如下命令進行鏈結希望得到可執行程式。

gcc -o main main.o 

你會發現,編譯器報錯了:

/tmp/cccpa13l.o: in function `main':  

main.c:(.text+0x7): undefined reference to `test'  

collect2: ld returned 1 exit status 

其根本原因也是找不到test()函式的實現檔案,由於該test()函式的實現在test.a這個靜態庫中的,故在鏈結的時候需要在其後加入test.a這個庫,鏈結命令修改為如下形式即可。

gcc -o main main.o ./test.a  

//注:./ 是給出了test.a的路徑

gcc -o main main.c ./test.a  

//同樣,如果不加test.a也會報錯

3.    鏈結的庫檔案中又使用了另乙個庫檔案

這種問題比較隱蔽,也是我最近遇到的與網上大家討論的不同的問題,舉例說明如下,首先,還是看看測試**。

編譯,打包為靜態庫:test.a

gcc -c test.c  

ar -rc test.a test.o 

至此,我們得到了test.a檔案。下面我們開始編寫c++檔案main.cpp

mysql問題集總

安裝配置mysql prefix usr local mysql mysql安裝目錄 datadir mydata 資料庫存放目錄 with charset utf8 使用utf8格式 with extra charsets complex 安裝所有的擴充套件字符集 enable thread sa...

android makefile編譯問題總結

經過對android makefile檔案的使用,過程 現了各種各樣的問題 1 ninja error so needed by out target product obj arm shared libraries lib intermediates packed lib so missing a...

MySQL中Cardinality問題總結

1.怎麼檢視索引是否具有高可用性?答 使用以下語句,檢視結果的cardinality一欄,如果顯示的是100,那就說明該欄位存在100個不重複的項,這時根據實際情況決定是否保留該索引。但是,cardinality的結果卻並不是非常精確的,只能當其是乙個預估值,在索引的操作很頻繁時 insert和up...