linux 編譯錯誤總結

2021-10-12 20:55:16 字數 753 閱讀 6535

今天編譯的時候遇到了乙個這個問題,這個問題從表面上來看是沒有定義main函式,但是在crt1.o這個檔案的位置確實需這個介面的實現。

這樣我們其實是需要追根到底的,為什麼這個檔案需要我們對main的實現呢—》原因是我們想要實現乙個應用程式,乙個應用程式的入口是main函式 --》生成應用程式的哪乙個階段需要main呢–》在鏈結的時候需要,那麼我們在想鏈結的時候一定要包含main函式的 .o,在生成main函式的.o的時刻我們並不需要這個檔案。

我的錯誤是在編譯的生成 .o的檔案的時候 flag 引數沒有寫對, 需要加上 -c才可以的。

這裡我主要將在c c++混合編譯的時候這種問題的原因,主要是c 和 c++檔案的編譯器是不一樣的,這也是我們經常看到的c檔案使用g++的時候,編譯就會有好多問題,而使用gcc編譯的時候只是warning,甚至沒有錯誤。因為g++對編譯對於原始檔的要求更加嚴格。

回到主題,我們c++ 在使用c檔案的函式的時候,由於編譯出來的檔案的不一樣,使得編譯出來的函式名字也不一樣,這樣在鏈結的時候就會出現標題中提到的錯誤,所一我們如何避免呢?

使用如下方法:

在使用的c函式的標頭檔案新增上如下字段

#ifdef __cplusplus 

extern

"c"#endif

fun();

#ifdef __cplusplus

}#endif

因為在使用g++編譯的時候,如碰到__cplusplus 宣告,則會用c的方式進行編譯。

VC編譯錯誤總結

2.vs2005,vs2008 缺少 在識別符號 pvoid64 的前面 解決方法 解決 開啟winnt.h 檔案 在如下定義 typedef void pvoid typedef void pointer 64 pvoid64 前新增 define pointer 64 ptr64就行了 3.vs...

xcode編譯錯誤總結

no architectures to compile for only active arch yes 這種錯誤 修改building settings下 build active architecture only 為no即可。dyld symbol not found objc setprop...

caffe編譯錯誤總結

問題1 fatal error hdf5.h 沒有那個檔案或目錄 在makefile.config檔案,新增 usr include hdf5 serial 到 include dirs,也就是把下面第一行 改為第二行 include dirs python include usr local in...