使用g ++构建程序时遇到一些问题。该程序使用的是我用C编写的库,名为libiec60063。我想用C ++编写我的新项目(即使还不熟悉C ++),但我无法正确地链接它。
例如,我在名为main.cpp的文件中有以下代码
#include <libiec60063.h>
int main() {
Select_IEC60063_Number(125, 12);
return 0;
}
我可以正确编译源代码
g++ -I/home/workspace/a_CommonBinary/include -c main.cpp
如果我想链接它,我会收到一些错误消息
g++ -L/home/workspace/a_CommonBinary_draft/lib -o main main.o -lm -liec60063
main.o: In function `main':
main.cpp:(.text+0x1b): undefined reference to `Select_IEC60063_Number(double, int)'
collect2: error: ld returned 1 exit status
如果我将主文件重命名为main.c,我可以使用相同的参数正确编译和链接程序与GCC编译器。
有人可以解释一下gcc和g ++之间的区别吗?
答案 0 :(得分:1)
你可能忘了把
#ifdef __cplusplus
extern "C" {
#endif
靠近libiec60063.h
标头文件的开头,
#ifdef __cplusplus
}; // end extern "C"
#endif
靠近头文件的末尾,或者如果您不想更改头文件:
extern "C" {
#include <libiec60063.h>
};
在您的C ++代码中。
见this question。您需要停用name mangling。阅读compatibility of C & C++。
顺便说一句,您应该使用g++ -Wall -Wextra -g
进行编译,也可以使用-std=c++11
和代码C++11进行编译