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

标签 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 中。

最佳答案

如果您假装链接的库不准备在目标代码中导出 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++ 代码。

关于C 项目中的 C++ 静态库链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52713273/

相关文章:

c++ - 如何找到近奇异矩阵的逆矩阵?

c++ - 如何获取字符串中特定元素的地址

c++ - 如何在 Gtkmm3 中使用 CssStyleProvider

c++ - std::async 在指定 launch::async 时不执行

c - 在 SwiftUI 中,我如何创建一个将项目添加到 ScrollView 的函数?

c++ - "Standard library"用于使用 Make 构建 C/C++ 项目

c - Malloc 不在函数中工作

c - 从 8 位微 Controller 中的内存位置(具有 24 位地址)读取值

c++ - 同一文件中的多个对象 - 如何创建 Makefile?

x86 - 为 x86 构建 PJSIP 错误