Makefile中庫順序引起的詭異報錯

2021-10-10 05:28:04 字數 2089 閱讀 5454

libiotsdk.a是我在別的地方編譯生成的庫檔案,在當前工程引用並編譯,報錯如下:

gcc -o /mnt/web/main .

/obj/db_ble.o .

/obj/acmsg.o .

/obj/main.o -l../

../.

./lib -lcurl -lid2client -litls -lpthread -lrt -lsqlite3 -lssl -lcrypto -liotsdk..

/../

../lib/libiotsdk.

a(database.o)

: in function `db_open':

/mnt/hgfs/gateway/src/sdk/

./db/database.c:

33: undefined reference to `sqlite3_open'..

/../

../lib/libiotsdk.

a(database.o)

: in function `db_close':

/mnt/hgfs/gateway/src/sdk/

./db/database.c:

51: undefined reference to `sqlite3_close'..

/../

../lib/libiotsdk.

a(database.o)

: in function `db_update':

/mnt/hgfs/gateway/src/sdk/

./db/database.c:

92: undefined reference to `sqlite3_exec'..

/../

../lib/libiotsdk.

a(database.o)

: in function `db_record_count':

/mnt/hgfs/gateway/src/sdk/

./db/database.c:

122: undefined reference to `sqlite3_get_table'..

/../

../lib/libiotsdk.

a(database.o)

: in function `db_record_unique':

/mnt/hgfs/gateway/src/sdk/

./db/database.c:

152: undefined reference to `sqlite3_get_table'..

/../

../lib/libiotsdk.

a(database.o)

: in function `db_query':

/mnt/hgfs/gateway/src/sdk/

./db/database.c:

246: undefined reference to `sqlite3_get_table'

提示意思是缺少sqlite的庫,但是編譯libiotsdk.a的時候沒報錯,而且在當前工程中也引用了sqlite的庫。

搞了半天都不行,偶然之中調整了libiotsdk.a到最前面消除了這個錯誤:

root@ubuntu:

/mnt/hgfs/gateway/src/prj/bleac# make

gcc -o /mnt/web/main .

/obj/db_ble.o .

/obj/acmsg.o .

/obj/main.o -l../

../.

./lib -liotsdk -lcurl -lid2client -litls -lpthread -lrt -lsqlite3 -lssl -lcrypto

root@ubuntu:

/mnt/hgfs/gateway/src/prj/bleac# make

make:

'/mnt/web/main' is up to date.

因此,在鏈結命令中需要注意庫之間的依賴順序,依賴其他庫的庫一定要放到被依賴庫的前面,這樣才能避免undefined reference的錯誤。

iis和 安裝順序引起的問題

裝了vs2005再裝iis,結果出了些小問題 訪問iis元資料庫失敗 思考可能是次序出了問題,解決 1 開啟cmd,進入 c windows microsoft.net framework v2.0.50727 2 輸入 aspnet regiis.exe i 稍等片刻,註冊成功就解決問題了。接著還...

null 與 equals判斷順序引起的頭疼事

寫了乙個方法,擷取字串的長度 public static string parseimagepath string path else return imagepath 標紅色 有問題。如果path null,那麼這個判斷就不起作用了,會報錯 剛開始,怎麼也想不通,已經在控制台上輸出了path nu...

Makefile 中 的區別

在makefile中我們經常看到 這幾個賦值運算子,那麼他們有什麼區別呢?我們來做個簡單的實驗 新建乙個makefile,內容為 ifdef define vre vre hello world else endif ifeq opt define vre hello world first end...