将问题与g ++联系起来,但不与cc联系

时间:2013-09-22 17:50:09

标签: c++ c linker

我使用的是64位CentOS版本的Linux。我正在尝试在我的C和C ++程序中创建和使用静态库(libUtility.a)。我可以用C编译库,并用ar生成libUtility.a文件。然后我尝试将其链接到我的程序中。当我使用C编译器

时,一切正常
cc myprog.c -o myprog -I/usr/local/include -L/LocationOfMyLib -lUtility

但是,当我使用g ++编译器时,我会收到错误。

g++ myprog.c -o myprog -I/usr/local/include -L/LocationOfMyLib -lUtility
myprog.c: In function 'int main(int, char**)':
/tmp/cckIN1Yk.o: In function `main':
myprog.c:(.text+0x41): undefined reference to `Utility_HiWorld(char*)'
collect2: ld returned 1 exit status

我在C和C ++方面经验丰富,但没有创建自己的经验 库。该库只有一个名为Utility_HiWorld()的子程序。并且myprog.c只调用一个子例程。我在这里做错了什么?

新:好的,我绝对没有使用'extern“C”'。我甚至不知道那是什么。这解决了它。

1 个答案:

答案 0 :(得分:4)

我猜你没有告诉你的C ++编译器外部函数是用C语言编写的。

由于你想使用C和C ++中的库,你需要在库头文件中做这样的事情。

#ifdef __cplusplus
extern "C" {
#endif

void Utility_HiWorld(char*);

#ifdef __cplusplus
}
#endif

__cplusplus仅为C ++程序定义,因此C ++程序将看到extern "C" { ... },它需要告诉它Utility_HiWorld是一个C函数。

有关详细信息,请参阅here

只是一个猜测,如果您认为问题是其他原因,请发布一些代码。