【问题标题】:Link a static library on a .cpp file在 .cpp 文件上链接静态库
【发布时间】:2012-10-18 14:45:09
【问题描述】:

我正在尝试编译一些代码,这些代码使用在名为 staticlib.a 的静态库中实现的函数。我还有名为 staticlib.h 的头文件,其中包含该函数的声明。我的 main,包含在 main.c 文件中,其中包括 staticlib.h,只调用该函数而不调用其他函数。所以我编译 gcc main.c 静态库.a 一切正常。我需要 c++ 的一些特性,但如果我在 main.cpp 中正确更改 main.c 并以相同的方式编译 gcc main.cpp 静态库.a 发生对我的函数的未定义引用。我怎样才能使它起作用?为什么会出现这个问题?我在我访问过的任何网站上都找不到解释...... 谢谢大家的回答。

【问题讨论】:

  • 给OP,请接受一些答案,很明显你不了解stackoverflow站点的操作
  • 好吧,到目前为止,我已经在 stackoverflow 网站上提出了 3 个问题,直到现在还没有任何答案可以完全解决我的问题......在这个问题中,我得到了正确的答案,现在我会接受它...

标签: c++ c gcc static-libraries .a


【解决方案1】:

您必须将库中的函数定义为“C”函数,而不是 C++ 函数 - 在 main.cpp 中执行此操作

extern "C"
{
#include "staticlib.h"
}

【讨论】:

    【解决方案2】:

    C 和 C++ 的编译方式不同,C++ 使用名称修饰(在目标文件中嵌入 C++ 类型信息)。要停止这种行为以便您可以从 C++ 链接到 C 代码,您可以在包含 C 头文件时在 C++ 中使用 extern C 语法。

    请看这里 http://www.cplusplus.com/forum/general/1143/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多