无法将c ++ exe与C库(GNU)相关联

时间:2013-02-12 20:52:34

标签: c++ c gcc linker g++

我已经创建了一些简单的基本代码来说明我的问题。

header.h:

#ifdef __cplusplus
#   define API extern "C"
#else
#   define API
#endif

void callback();
API void libFunction();

testlib.c:

#include "header.h"

void libFunction()
{
    Callback();
}

我将其编译为静态库,如下所示:

gcc -c testlib.c
ar rsc libtest.a testlib.o

然后我的示例c ++代码是

main.cpp中:

extern  "C"{
#include  <lib/header.h>
}
#include  <stdio.h>

main()
{
    libFunction();
}

void Callback()
{
    printf("Callback is called \n");
}

我尝试构建我的exe

g++ -I. -L. main.cpp -ltest

并收到以下错误

./lib/libtest.a(testlib.o): In function `libFunction':
testlib.c:(.text+0x7): undefined reference to `Callback'
collect2: ld returned 1 exit status

我花了整整一天的时间试图找出原因。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

如果要从C文件中调用Callback,则需要在C ++文件中构建extern "C" - 否则C ++名称修改将导致符号不对齐。您需要将Callback()main.cpp的定义更改为:

extern "C" void Callback()

您的案例也不匹配。标题中的原型显示callback,但您使用Callback的其他任何地方。在重新阅读您的代码时,我认为修复此案例不匹配将解决您的所有问题。我在第一次阅读时没有在extern "C"周围看到#include <lib/header.h>包装。

相关问题