C++ C 项目中的静态库链接

C++ static library linking in a C project

本文关键字:静态 链接 项目 C++      更新时间:2023-10-16

我正在尝试将C++库静态链接到 C 项目,但似乎找不到出路。我阅读了多个帖子,但没有任何帮助。 下面是我的Makefile的片段:

CFLAGS += -I../path/to/headers
LIBS += ../path/to/lib.a

我收到以下链接错误:

"undefined reference to ...
collect2: ld returned 1 exit status"

我检查了这篇文章以进行订购,但我不认为这是问题: 具有静态库的 C++ 未定义引用

我想知道这是否可能。如果是这样,我需要将哪些标志添加到我的 C 项目 Makefile 中。

如果您假装链接的库不准备在目标代码中导出与 C 兼容的函数名称,则应向项目添加 C++/C 桥接。

此桥可能包含一个C++头文件和源文件,您可以在其中编写使用 C++ 库的代码C++其中需要从 C 程序中使用的符号以 C 兼容的方式导出。

你应该做这样的事情:

桥.h

#include <cpplibrary.h>
#ifdef __cplusplus
extern "C" {
#endif
int bridge();
#ifdef __cplusplus
}
#endif

桥.cpp

#include "bridge.h"
extern "C" {
int bridge() {
CppLibrary *object = new CppLibrary();
return object->returnInt();
}
} // extern "C"

此C++代码是编译的,导出 C 链接器可以理解的名称,允许间接使用该给定库的C++代码。