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

时间:2018-10-09 04:12:34

标签: c++ c makefile

我正在尝试将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中。

1 个答案:

答案 0 :(得分:0)

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

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

您应该执行以下操作:

bridge.h

#include <cpplibrary.h>
#ifdef __cplusplus
extern "C" {
#endif

int bridge();

#ifdef __cplusplus
}
#endif

bridge.cpp

#include "bridge.h"

extern "C" {
int bridge() {
CppLibrary *object = new CppLibrary();
return object->returnInt();
}

} // extern "C"

此C ++代码经过编译,导出了C链接程序可以理解的名称,从而可以间接使用该给定库的C ++代码。