c語言被提示 undefined reference

時間 2021-05-07 20:01:23

1樓:匿名使用者

假設你已經正確編譯和安裝了sqlite,寫個測試程式來測試:#include#include#include"sqlite3.h"intmain(void)elseprintf("openmydatasuccessfully!

\n");sqlite3_close(db);return0;}用gcc來編譯的時候總是會出現錯誤,編譯的命令如下gcc-static-ohello-lsqlite3-l/usr/local/lib-i/usr/local/includehello.c錯誤資訊如下/tmp/cckekpx9.o(.

text+0x37):infunction`main'::undefinedreferenceto`sqlite3_open'/tmp/cckekpx9.

o(.text+0x51):infunction`main'::

undefinedreferenceto`sqlite3_errmsg'/tmp/cckekpx9.o(.text+0x73):

infunction`main'::undefinedreferenceto`sqlite3_close'/tmp/cckekpx9.o(.

text+0x9b):infunction`main'::undefinedreferenceto`sqlite3_close'collect2:

ldreturned1exitstatus那麼,恭喜你中招了。錯誤根本不在sqlite也不在你的程式,而在gcc。gcc的編譯引數是有順序的。

正確的編譯命令是:gcc-ohello-l/usr/local/lib-i/usr/local/include-statichello.c-lsqlite3

2樓:匿名使用者

你這是什麼結構,為什麼在main函式裡定義float in(float c,float d)函式

#include

#include

float in(float,float);

int main(void)

return 0;

}float in(float c,float d)return(sum);}

c語言編譯.o時提示undefined reference to `main'怎麼辦?

3樓:愛笑的高大傻

主函式應該寫成int main(),你寫成mian了。

在此,只舉個靜態庫的例子,假設原始碼如下。

先把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的路徑

【擴充套件】:同樣,為了把問題說清楚,上面我們把**的編譯連結分開了,如果希望一次性生成可執行程式,則可以對main.c和test.a執行如下命令。

gcc -o main main.c ./test.a  //同樣,如果不加test.a也會報錯。

c語言中undefined reference to ""怎麼解決

4樓:

解決方法:這是因為沒有定義的引用,所以可以在複製**的時候注意一下變數的命名即可(命名可加字尾***)。

1、「undefined reference to」的意思是,該函式未定義,遇到多次出現這個情況有以下檢查方案:

(1)如果提示未定義的函式是某個庫的函式。檢查庫時候已經安裝,並在編譯命令中採用-l和-l引數匯入庫;

(2)如果提示未定義的函式是程式中的函式。檢查是否在標頭檔案中宣告,是否在編譯中有對應的obj檔案;

(3)如果提示未定義的函式是程式中的函式,還有一種很隱蔽的可能:檢查改函式的**的上下文是否有#ifdef或者#ifndef等預編譯資訊,這也很有可能導致相關**沒有被編譯而出現「undefined reference to」提示。

5樓:小貓咪的

3、gcc -o main main.o這時,你會發現,報錯了:

4、main.o: in function `main':

main.c:(.

text+0x7): undefined reference to `test'collect2: ld returned 1 exit status。

拓展資料:

1、「undefined reference to」的意思是,該函式未定義,遇到多次出現這個情況有以下檢查方案:

(1)如果提示未定義的函式是某個庫的函式。檢查庫時候已經安裝,並在編譯命令中採用-l和-l引數匯入庫;

(2)如果提示未定義的函式是程式中的函式。檢查是否在標頭檔案中宣告,是否在編譯中有對應的obj檔案;

(3)如果提示未定義的函式是程式中的函式,還有一種很隱蔽的可能:檢查改函式的**的上下文是否有#ifdef或者#ifndef等預編譯資訊,這也很有可能導致相關**沒有被編譯而出現「undefined reference to」提示。

6樓:北陌小孤狼

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

3.gcc -o main main.o這時,你會發現,報錯了:

4.main.o:

in function `main':main.c:

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

ld returned 1 exit status

這就是最典型的undefined reference錯誤,因為在連結時發現找不到某個函式的實現檔案,本例中test.o檔案中包含了test()函式的實現,所以如果按下面這種方式連結就沒事了。

c語言問題: 包含了標頭檔案還是會報undefined reference to錯誤

7樓:匿名使用者

.c或.h只是檔名,重要是各種變數的宣告,檢查報錯的變數宣告位置吧。

8樓:匿名使用者

.c的檔案你在.h標頭檔案裡宣告瞭嗎?**貼出來看看

c語言提示 undefined reference xx

9樓:匿名使用者

函式定義時拼錯了,拼成了dispaly

dispaly

display

C語言動態分配記憶體為什麼總是提示警告?可以執行

北問邇 1.就算沒有free main 結束後也是會自動釋放malloc 的記憶體的,這裡監控者是作業系統,設計嚴謹的作業系統會登記每一塊給每一個應用程式分配的記憶體,這使得它能夠在應用程式本身失控的情況下仍然做到有效地 記憶體。你可以試一下在taskmanager裡強行結束你的程式,這樣顯然是沒有...

為什麼老是提示 未宣告的識別符號a,b,望c語言大神指教

風若遠去何人留 a 和b是main裡面的,沒有傳到print中.所以出錯.這個最好的做法是,include int add int a,int b void print int x,int y void main int add int a,int b void print int x,int y ...

c語言 輸入整數,判斷它能否被3,5,7整除

include int main void 光棍誓言 include void main include using namespace std int main 閆孟喬孟孟 if x 3 0 cout能被3整除 n else cout 不能被3整除 n if x 5 0 cout 能被5整除 n ...