第一個錯誤 crt1.o(.text+0x34): error: undefined reference to ‘main’
今天編譯的時候遇到了一個這個問題,這個問題從表面上來看是沒有定義main函式,但是在crt1.o這個檔案的位置確實需這個介面的實作,
這樣我們其實是需要追根到底的,為什么這個檔案需要我們對main的實作呢—》原因是我們想要實作一個應用程式,一個應用程式的入口是main函式 --》生成應用程式的哪一個階段需要main呢–》在鏈接的時候需要,那么我們在想鏈接的時候一定要包含main函式的 .o,在生成main函式的.o的時刻我們并不需要這個檔案,
我的錯誤是在編譯的生成 .o的檔案的時候 flag 引數沒有寫對, 需要加上 -c才可以的,
第二個錯誤 undefined reference to ‘XXXX’
這里我主要將在C C++混合編譯的時候這種問題的原因,主要是c 和 c++檔案的編譯器是不一樣的,這也是我們經常看到的c檔案使用g++的時候,編譯就會有好多問題,而使用gcc編譯的時候只是warning,甚至沒有錯誤,因為g++對編譯對于源檔案的要求更加嚴格,
回到主題,我們c++ 在使用c檔案的函式的時候,由于編譯出來的檔案的不一樣,使得編譯出來的函式名字也不一樣,這樣在鏈接的時候就會出現標題中提到的錯誤,所一我們如何避免呢?
使用如下方法:
在使用的c函式的頭檔案添加上如下欄位
#ifdef __cplusplus
extern "C" {}
#endif
fun();
#ifdef __cplusplus
}
#endif
因為在使用g++編譯的時候,如碰到__cplusplus 宣告,則會用c的方式進行編譯,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240881.html
標籤:其他
下一篇:致敬2020——打工人的成長故事
