使用g ++链接我的程序

时间:2015-03-04 12:28:19

标签: c++ linker g++

使用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 ++之间的区别吗?

1 个答案:

答案 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进行编译