c++ - 混合 C 和 C++ 库

标签 c++ c gnu

我在构建用 C++ 编码的可执行文件时遇到了一个奇怪的问题,该可执行文件使用本身依赖于 C 库的 C++ 库。我使用 gcc 编译了构成 C 库的 C 模块,使用 g++ 编译了所有其他源模块。 C 和 C++ 库都是静态库。

当我在 C++ 源代码中包含 C 库中的头文件时,我总是将它包装在 extern "C"中:

extern "C"
{
  #include <c-library-header.h> 
}

现在奇怪的是链接时会出现“ undefined reference ”错误,但这些会根据我列出库的顺序发生变化:

  • 如果我首先列出 C 库,则 C++ 模块引用的该库中的所有符号都显示为“未定义”。
  • 如果我首先列出 C++ 库,则 C++ 模块引用的该库中的所有符号都显示为“未定义”。

我本以为在 g++ 命令行上出现静态库的顺序是完全不相关的。有人有任何线索吗?

最佳答案

顺序很重要。

如果 libxxx 依赖于 libyyy,则应首先指定 libxxx,即 -lxxx -lyyy

在不幸的情况下,当两者相互依赖时,一个库可能会被提及两次

-lxxx -lyyy -lxxx

参见:

关于c++ - 混合 C 和 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22825956/

相关文章:

c - 当我通过putty编译c程序时出现错误

Linux 显示详细/技术文件信息

c - C 中的整数幂

c++ - cmake 会忽略 .hpp 文件更改吗?

c - 最佳拟合矩形算法

c++ - 如何在 C 或 C++ 中全局初始化数组?

C 预处理程序对定义的数组元素进行错误检查

linux - 如何让 `MANPATH=~/.nmap/doc man 1 nmap` 寻找 nmap.1?

可以*仅*放在堆栈上的 C++ 类?

c++ - 计算给定零钱的方法数量