g++对静态库的链接不起作用

问题描述 投票:0回答:1

我有一个simle文件main.cpp和静态库MyLib.lib,我试图将程序与静态库连接起来,就像这样。

g++ -o m main.cpp -static -L c:\lib\path -l MyLib

或者像这样

g++ -o m main.cpp -L c:\lib\path -Wl,-Bstatic -l MyLib -Wl,-Bdynamic

编译过程成功退出,没有错误。然而,当我试图从命令行运行m.exe时,我得到错误信息,说因为找不到MyLib.dll而无法运行。

我特别说过它应该针对静态库MyLib.lib编译,那么为什么它要搜索动态库呢?我在上面的命令中犯了错误吗?

c++ windows g++ static-linking lib
1个回答
-1
投票

看起来你真的是用共享库链接的,你需要把包含MyLib.dll的文件夹的位置添加到PATH中,在命令提示符中键入这个。

SET PATH=<dll_location>;%PATH%
m.exe

或者确保MyLib.dll和m.exe在同一个文件夹中。

如果gcc只找到了一个共享库,那么有可能是静态标志没有起作用。

为什么你的库不叫libMyLib.a?MyLib.lib这个名字似乎意味着你从MSVC那里得到了它的预建库。如果是这样,你怎么知道MyLib.lib不是一个共享库?

有什么方法可以让你自己构建MyLib作为一个静态库?

© www.soinside.com 2019 - 2024. All rights reserved.