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 ...