c呼叫c qt QT下c和c 混編問題

2021-10-13 14:36:03 字數 651 閱讀 4629

這些天折騰qt,在整合各種**的時候,老司機也碰到不少問題,為了方便後查,初步總結如下:

1.新版qt中一般使用g++編譯cpp檔案和c檔案,可以在專案中同時使用c檔案和cpp檔案。

字尾cpp檔案g++自動識別為c++**自動進行c++編譯,字尾c檔案自動識別為c**進行c編譯。這個時候必須注意在c檔案中不要使用c++內容和c++的標頭檔案

2.呼叫.c檔案中的函式出現undefined reference to `***xx()'。

這是c/c++相容問題,在c的標頭檔案的相關函式宣告新增extern "c"即可解決,例如

#ifdef __cplusplus

extern "c" {

#endif

extern int test(int, int);

#ifdef __cplusplus

#endif

3.出現error: memory: no such file or directory #include

這是.c檔案中引用c++標準的原因,可將檔案字尾修改為.cpp,使用c++編譯

4.出現unknown type name 『namespace』

這是c編譯c++的問題, c中沒有namespace關鍵子,可將檔案字尾修改為.cpp,使用c++編譯,或者去掉該關鍵字

C和C 混編,c呼叫C ,c 呼叫C

這兩天一直在解決這樣的乙個問題,專案之中有如下的需求 嵌入式的產品,演算法部分用c 實現,而控制程式和其它程式用c實現.這就要求可以通過c來呼叫c 的演算法程式.同時,這個專案有乙個pc的demo程式,是用vc開發的,這又要求c 能呼叫c的主控程式.一直知道應該用extern,但是具體該如何使用,一...

c 呼叫c和c呼叫c

c 的設計是相容c的,但是呼叫的時候還是需要遵循規則 1 包含標頭檔案 extern c 2 宣告呼叫的函式 extern c 為什麼要加extern c 1 c 語言支援函式過載,c語言不支援函式過載。2 函式被c 編譯後在庫中的名字與c語言的不同。void add int x,int y 該函式...

C與C 的混編方法

0 約定 c檔案使用gcc編譯,cpp檔案使用g 編譯,生成對應的object檔案 g 也可以編譯c檔案,但是預設編譯出來的符號是以c 方式 我們可以指定extern c 或者 extern c 來指定編譯的時候函式是以c或者c 方式修飾 使用g 編譯需要嚴格型別檢查,所以對於c檔案,盡量還是用gc...