在下面的代碼中,我試圖從C函數中調用用C++編寫的虛擬函數(使用C++頭文件,如ap_fixed.h,ap_int.h)。當我用g ++編譯時,代碼運行良好。但是當我使用gcc編譯test.c時,它會拋出一個錯誤,因爲我已經包含了一個C++頭文件,這是一個有效的錯誤。在C中使用gcc鏈接C++靜態庫
是否有任何解決方法使用gcc進行編譯?我從一些文章中讀到,以這種方式合併C/C++代碼並不是一個好習慣。請指教我是否有任何嚴重的問題與一個大的C代碼庫工作,並做類似的事情。
感謝
頭文件:testcplusplus.h
#include "ap_fixed.h"
#include "ap_int.h"
#ifdef __cplusplus
extern "C" {
#endif
void print_cplusplus();
#ifdef __cplusplus
}
#endif
testcplusplus.cc
#include <iostream>
#include "testcplusplus.h"
void print_cplusplus() {
ap_ufixed<10, 5,AP_RND_INF,AP_SAT > Var1 = 22.96875;
std::cout << Var1 << std::endl;
}
test.c的
#include <stdio.h>
#include "testcplusplus.h"
int main() {
print_cplusplus();
}
使用的命令:
g++ -c -o testcplusplus.o testcplusplus.cc
ar rvs libtest.a testcplusplus.o
gcc -o test test.c -L. -ltest
錯誤:
In file included from ap_fixed.h:21:0,
from testcplusplus.h:1,
from test.c:2:
ap_int.h:21:2: error: #error C++ is required to include this header file
您可以指定'GCC -x C++' –
不相關的迫在眉睫的問題輸入語言,但你應該包括'testcplusplus。在'testcplusplus.c'(它應該有擴展名'.cc'或'.cpp',以確保它被識別爲C++文件)。 –
另外:如果可執行文件中有C++,'main'應該在C++中。 (雖然我不知道現代實現是否仍然需要這個。) –