我已经创建了一些简单的基本代码来说明我的问题。
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
我花了整整一天的时间试图找出原因。有人可以帮忙吗?
答案 0 :(得分:3)
如果要从C文件中调用Callback
,则需要在C ++文件中构建extern "C"
- 否则C ++名称修改将导致符号不对齐。您需要将Callback()
中main.cpp
的定义更改为:
extern "C" void Callback()
您的案例也不匹配。标题中的原型显示callback
,但您使用Callback
的其他任何地方。在重新阅读您的代码时,我认为修复此案例不匹配将解决您的所有问题。我在第一次阅读时没有在extern "C"
周围看到#include <lib/header.h>
包装。