3

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

标头.h:

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

void callback();
API void libFunction();

测试库.c:

#include "header.h"

void libFunction()
{
    Callback();
}

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

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

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

主.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

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

4

1 回答 1

3

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

extern "C" void Callback()

你也有大小写不匹配。标题中的原型说明callback,但在您使用的其他任何地方Callback。在重新阅读您的代码时,我认为只需修复这种大小写不匹配即可解决您的所有问题。我没有看到第一次阅读的extern "C"包装。#include <lib/header.h>

于 2013-02-12T20:55:59.487 回答