我正在尝试将 C++ 库静态链接到 C 项目,但似乎找不到出路。我阅读了多篇文章,但没有任何帮助。
下面是我的 Makefile 的片段:
CFLAGS += -I../path/to/headers
LIBS += ../path/to/lib.a
我收到以下链接错误:
"undefined reference to ...
collect2: ld returned 1 exit status"
我检查了这篇文章的订购情况,但我认为这不是这里的问题:
c++ undefined references with static library
我想知道这是否可能。如果是这样,我需要将哪些标志添加到我的 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++ 代码。