【问题标题】:Why 2 static libs can't call to each other's function为什么 2 个静态库不能调用彼此的函数
【发布时间】:2015-01-29 17:18:48
【问题描述】:

我有 2 个静态库:liba.a、libb.a 和一个链接两者的可执行文件。 liba.a 正在调用 libb.a 中定义的函数 foo 两个库都编译成功,但我的 exe 似乎有链接器错误:

undefined reference to `foo'

需要帮助...

使用 ubuntu 14.04。 gcc 版本 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

【问题讨论】:

  • 什么平台?什么编译器?
  • 您在编写问题描述方面需要帮助。您似乎也不会拼写“静态”...?
  • 我想知道你打算如何在 Ubuntu 上运行 EXE?
  • 你是如何编译可执行文件的?你确定链接两个库吗?
  • 您的问题应该如下所示:这是 liba(标头和 src,其中一行定义了 foo),这是 libb(标头和 src,其中一行定义了一个函数(如果有)。这是我如何编译:3个编译命令。这是我得到的错误

标签: c++ linker linker-errors


【解决方案1】:

构建时:

g++ liba.a libb.a myCode.o -o myExe

这是错误的,因为the order of the arguments matters。如果myCode 使用来自libalibb 的符号,则必须在命令行中之后指定这些库:

g++ myCode.o liba.a libb.a -o myExe

或者,您可以要求链接器将这三个都视为一个“组”;如果您这样做,将在该组中为您解决依赖关系,而无需担心顺序:

g++ "-Wl,--start-group" liba.a libb.a myCode.o "-Wl,--end-group" -o myExe

【讨论】:

  • 你是对的!!!我一直认为链接器会在所有库和 .o 文件中搜索函数名。不知道它只搜索前向... :( 很遗憾我不得不花费我生命中的几个小时来理解它。
  • @yehudahs:不,很遗憾你没看the FAQ
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2010-12-20
  • 1970-01-01
  • 2011-03-02
相关资源
最近更新 更多