g++ 只查找 .lib 文件

Posted

技术标签:

【中文标题】g++ 只查找 .lib 文件【英文标题】:g++ only looks for .lib files 【发布时间】:2020-04-17 10:39:29 【问题描述】:

我正在使用带有 mingw-w64 的 Windows 10。我尝试使用静态链接库编译程序。我使用了这个命令:g++ main.cpp -Llibs/ -lfoo。但是MinGW说它找不到库文件,所以我尝试将foo.a重命名为foo.lib,瞧,编译器找到了foo.lib。为什么 MinGW 看不到 *.a 文件了?

【问题讨论】:

【参考方案1】:

问题是 mingw 不会查找 <libname>.a 文件,因为它不希望它们存在。

来自文档:

MinGW 支持根据“.lib”和“.dll”约定命名的库,除了 *nix 系统上常见的正常“lib.a”约定

这是因为 windows 不像 *nix 那样为其库使用 lib 前缀(在 windows 上,共享库 foo 为 foo.dll,在 *nix 上为 libfoo.so)。我不确定您是如何设法获得缺少lib 前缀的.a(除非您将其重命名),但您的.a 文件应该在其中包含lib 前缀(指定时这个你省略了lib 部分所以libfoo.a 变成-lfoo)

【讨论】:

【参考方案2】:

来自the documentation:

当使用参数“-lxxx”调用 ld 时,它将尝试在其搜索路径的第一个目录中查找,

libxxx.dll.a xxx.dll.a libxxx.a xxx.lib libxxx.lib cygxxx.dll libxxx.dll xxx.dll

或者,您可以将libs/foo.a 作为参数直接传递给g++

【讨论】:

以上是关于g++ 只查找 .lib 文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux 下查找指令

g++ 在 /usr/local/lib 中找不到库

文件查找

文件查找和压缩

find文件查找

7-2 文件查找和压缩归档