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 文件的主要内容,如果未能解决你的问题,请参考以下文章