導航:首頁 > 源碼編譯 > 編譯內核源碼出現未定義的引用

編譯內核源碼出現未定義的引用

發布時間:2023-05-31 10:12:13

linux下 gcc編譯提示錯誤,,在函數_start中 main 未定義的引用

你是不是在編譯靜態庫或者動態庫?也就是沒有main函數。如果是,再參考一下下邊的提示。
-c 參數表示將源文件編譯成object(目標文件)。 即 gcc -c foo.c 會編譯成 foo.o
gcc 不加參數時會編譯且嘗試鏈接成可執行文件,然而 foo.c 的代碼中沒有main函數的定義,所以最終無法成功鏈接,故報錯。

② 編譯錯誤 未定義的引用 怎麼回事

③ c語言為什麼已經引用了頭文件,編譯時還提示「未定義的引用」

編譯的時候需要連接相應的庫,加個 -lm 參數就可以

④ 交叉編譯時提示 對'__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

⑤ linux中用gcc編譯出現err:對『ceil』未定義的引用

#include <math.h>

⑥ C語言裡面對什麼未定義引用是什麼意思

undefined referenct to "xxxx"
如果xxxx是個函數,那麼它只有聲明和慶余沒有定義,就差此是沒有函數體
如果xxxx是個變數,那麼變數沒有定義。
如果你確信你定義了變數/函數,那麼和很可喚滾能是沒有讓定義的目標文件參與鏈接過程,
常見的有缺少動態庫鏈接指令,缺少obj。

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

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

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

別忘了鏈接的時候加-lm

閱讀全文

與編譯內核源碼出現未定義的引用相關的資料

熱點內容
建築設計規范pdf 瀏覽:98
如何合並兩個pdf 瀏覽:174
刷機包必須要解壓的單詞 瀏覽:483
android課表實現 瀏覽:864
頭條app在哪裡能看見有什麼活動 瀏覽:511
冰櫃壓縮機電容80歐 瀏覽:609
安卓各個版本圖標什麼樣 瀏覽:152
無錫哪裡有製作手機app 瀏覽:538
php字元串轉json數組 瀏覽:6
數控網路編程課程有哪些 瀏覽:482
python30特效程序編碼 瀏覽:392
安卓跟蘋果互傳照片用什麼 瀏覽:848
原創小說app哪個好看 瀏覽:97
首台湖南造鯤鵬伺服器雲伺服器 瀏覽:268
redhatphp 瀏覽:456
android智能家居藍牙 瀏覽:646
pt螺紋編程 瀏覽:451
手機電音app哪個好 瀏覽:749
checksum命令 瀏覽:637
java創建xml文件 瀏覽:171