最近在linux下程式設計發現乙個詭異的現象,就是在鏈結乙個靜態庫的時候總是報錯,類似下面這樣的錯誤:
(.text+0x13): undefined reference to `func'關於undefined reference這樣的問題,大家其實經常會遇到,在此,我以詳細地示例給出常見錯誤的各種原因以及解決方法,希望對初學者有所幫助。
測試**如下:
先把test.c編譯成靜態庫(.a)檔案
gcc -c test.car -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.car -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...