当前位置: 技术问答>linux和unix
linux下c++与c混合编程如何连接
来源: 互联网 发布时间:2017-05-29
本文导语: 原来很多c文件生成o文件,通过gcc将o文件连接成可执行程序,现在加入了部分cpp程序,其编译器改为g++,也是生成o文件,连接的时候出错:ld: test.o: Relocations in generic ELF (EM: 3) test.o: could not read symbols: File in ...
原来很多c文件生成o文件,通过gcc将o文件连接成可执行程序,现在加入了部分cpp程序,其编译器改为g++,也是生成o文件,连接的时候出错:ld: test.o: Relocations in generic ELF (EM: 3)
test.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [cpptest] Error 1
请问c++程序编译后的中间文件是什么类型?.o还是别的什么?如何与.o文件连接成可执行程序?
test.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [cpptest] Error 1
请问c++程序编译后的中间文件是什么类型?.o还是别的什么?如何与.o文件连接成可执行程序?
|
c的文件名后缀改成cpp
或者在cpp中调用c的东西时用extern "C" 包括起来 比如 extern "C" { #include "c.h" }
或者在cpp中调用c的东西时用extern "C" 包括起来 比如 extern "C" { #include "c.h" }
|
不同的编译器生成的o文件格式未必一样的,所以g++识别不了旧的o文件,你需要重新用g++编译所有的文件一次。用楼上的方法解决link时会出现的函数名找不到的问题
|
在 C 语言的头文件中一般有
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
|
你应该找找C与c++混合编程方面的文章,下面是其中之一:
http://www.cnblogs.com/joeblackzqq/archive/2011/04/13/2014785.html
http://www.cnblogs.com/joeblackzqq/archive/2011/04/13/2014785.html