gpt4 book ai didi

c++ - 将 C++ exe 与 C 库 (GNU) 链接时出现问题

转载 作者:太空狗 更新时间:2023-10-29 21:24:58 25 4
gpt4 key购买 nike

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

标题.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

我一整天都在试图找出原因。有人可以帮忙吗?

最佳答案

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

extern "C" void Callback()

你也有大小写不匹配的问题。 header 中的原型(prototype)显示 callback , 但你在其他任何地方都使用 Callback .在重新阅读您的代码时,我认为只要修复这种大小写不匹配就可以解决您所有的问题。我没有看到 extern "C" #include <lib/header.h> 的 wrapper 一读。

关于c++ - 将 C++ exe 与 C 库 (GNU) 链接时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com