为什么 2 个静态库不能调用彼此的函数

Why 2 static libs can't call to each other's function

本文关键字:函数 调用 不能 静态 为什么      更新时间:2023-10-16

我有 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)

当你构建时:

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

这是错误的,因为参数的顺序很重要。如果 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