當前位置:首頁 » 編程軟體 » Linux下編譯C未定義的引用

Linux下編譯C未定義的引用

發布時間: 2023-09-16 11:34:29

1. 交叉編譯時提示 對'__C_ctype_b'的未定義引用

出現這種情況的原因,主要是C/C++編譯為obj文件的時候並不旅賣需要函數的具體實現,只要有函數的原型即可。但是在鏈接為可執行文件的時候就必須要具體的實現了。如果錯誤是未聲明的引用,那就是找不到函數的原型,解決辦法這里就不細致說了,通常是相關的頭文件未包含。
解決辦法
指定原因就好辦了,既然知道是缺少了函數的喊昌具體實現,那麼就給它這個函數的實現就好了。比如上面的例子,是因為缺失了dlopen、dlsym、dlerror、dlclose這些函數的實現,這幾個函數是用於載入動態鏈接庫的,編譯的時候需要添加-ldl來使用dl庫(這是靜態庫,在系統目錄下/usr/lib/i386-linux-gnu/libdl.a、/usr/lib/x86_64-linux-gnu/libdl.a)。
但是看上面編譯的時候是有添加-ldl選項的,那麼為什麼不行呢?
gcc 依賴順序問題
這個主要的原因是gcc編譯的時候,各個文件依賴順序的問題。
在gcc編譯的時候,如果文件a依賴於文件b,那麼編譯的時候必須把a放前面,b放後面。
例如:在main.c中使用了pthread庫相關函數,那麼編譯的時候必須是main.c在前,-lpthread在後。gcc main.c -lpthread -o a.out。
上面拆滲逗出現問題的原因就是引入庫的順序在前面了,將其放置在後面即可了。
g++ -o spider bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o qstring.o sha1.o socket.o spider.o threads.o url.o -rdynamic -lpthread -levent -lcrypt -ldl

2. linux下C語言對編譯報錯『expl』未定義的引用

可以查看編程手冊,對裡面提到的宏進行測試,看是否支持該函數:

比較簡單的方法是加編譯器參數: -std=c99

別忘了鏈接的時候加-lm

熱點內容
配置裡面說的油耗是什麼意思 發布:2025-07-13 20:05:55 瀏覽:133
紅塵畫質助手的密碼是什麼 發布:2025-07-13 20:00:58 瀏覽:760
貨拉拉為什麼打不開安卓版的 發布:2025-07-13 19:52:05 瀏覽:641
瀏覽器源碼下載 發布:2025-07-13 19:45:26 瀏覽:262
大眾車的配置有哪些 發布:2025-07-13 19:39:54 瀏覽:294
通達信k線公式源碼 發布:2025-07-13 19:33:53 瀏覽:835
老式轉盤密碼箱怎麼開 發布:2025-07-13 19:32:44 瀏覽:74
少兒編程平板 發布:2025-07-13 19:32:43 瀏覽:879
集成編譯環境是什麼 發布:2025-07-13 19:30:27 瀏覽:688
php判斷字元是否相等 發布:2025-07-13 19:17:21 瀏覽:614