G++ 无法解析静态库中的非内联函数

g++ failed to resolve non-inlined function in a static library

本文关键字:函数 静态 G++      更新时间:2023-10-16

我正在编写一个依赖于c/c ++第三方库的c ++程序。我将第 3 方库编译为 Windows 和 Linux 上的静态库。我的代码在 Linux 上正常工作,但在 Windows 上出现链接错误,指示我的代码无法解析第 3 方库中的符号。

经过一些调试,我发现未解析的引用是该库中的非内联函数,并且可以解析内联函数(我已经测试过)。最初我认为这是 gcc 和 msvc 之间的不兼容,因为我使用 msvc 编译了 .lib 文件,同时尝试通过 mingw 使用 g++ 编译我的代码。我在Windows上使用g ++重新编译了库,但存在同样的问题。

知道解决方案是什么吗?

=========编辑

==

===============

澄清一下,第 3 方库不是模板化的。

我发现了问题:我将第 3 方库的 lib*.a(在 Linux 上生成)和 .lib(在 Windows 上生成)放在同一个目录中,因为我希望这段代码是跨平台的。在使用 g++ 在窗口中编译我的代码时,它似乎优先链接到 lib.a 文件,这会导致"未解析的符号"错误。我删除了 lib*.a 文件,g++ 现在链接到 *.lib 文件,并且可以正常工作。