- 求職 : 機(jī)器學(xué)習(xí)
- 論壇徽章:
- 79
|
本帖最后由 zsszss0000 于 2015-08-12 20:24 編輯
想要在C中調(diào)用C++的代碼,如下在cppHeader.h頭文件中定義了下面的代碼:- #ifndef CPP_HEADER
- #define CPP_HEADER
-
- extern "C" void print(int i);
-
- #endif CPP_HEADER
復(fù)制代碼 相應(yīng)的實(shí)現(xiàn)文件cppHeader.cpp文件中代碼如下:- #include "cppHeader.h"
- #include <iostream>
- using namespace std;
- void print(int i)
- {
- cout<<"cppHeader "<<i<<endl;
- }
復(fù)制代碼 在C的代碼文件c.c中調(diào)用print函數(shù):- extern void print(int i);
- int main(int argc,char** argv)
- {
- print(3);
- return 0;
- }
復(fù)制代碼- g++ -c cppHeader.cpp
- gcc cppHeader.o c.c
復(fù)制代碼 問題1:上面這樣編譯會(huì)出錯(cuò),為什么?- cppHeader.o: In function `__static_initialization_and_destruction_0(int, int)':
- cppHeader.cpp:(.text+0x2c): undefined reference to `std::ios_base::Init::Init()'
- cppHeader.cpp:(.text+0x31): undefined reference to `std::ios_base::Init::~Init()'
- collect2: ld 返回 1
復(fù)制代碼 問題2:如果去掉cppHeader.h中的#include <iostream>可以編譯成功,問什么? |
|