我正在尝试将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中。
答案 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 ++代码。