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

C++ g++;针对静态库的链接不起作用,c++,windows,g++,static-linking,lib,C++,Windows,G++,Static Linking,Lib,我有一个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 或者像这样: g++ -o m main.cpp -static -L c:\lib\path -l MyLib g++ -o m main.cpp

我有一个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
或者像这样:

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编译,那么它为什么要搜索动态库呢?我在上面的命令中出错了吗?

看起来您确实链接了一个共享库。 您需要将包含MyLib.dll的文件夹的位置添加到路径中。 在命令提示下,键入以下命令:

SET PATH=<dll_location>;%PATH%
m.exe
设置路径=;%路径%
m、 exe
或者确保MyLib.dll与m.exe位于同一文件夹中

如果gcc只找到一个共享库,那么静态标志可能不起作用

为什么你的库不是libMyLib.a?名称MyLib.lib似乎暗示您是从MSVC中预构建的。如果是,您如何知道MyLib.lib不是共享库


有没有一种方法可以将MyLib构建为静态库?

有没有理由在Windows上使用gcc?我没有dll文件。我只有一个lib文件。这是您评论中的重要信息,应添加到问题中。由于您链接MyLib.lib,然后得到“MyLib.dll找不到”,因此您链接了不正确的MyLib.lib,即用于链接MyLib.dllI的lib没有dll文件。我只有一个lib文件。该库仅为静态版本。您似乎已链接到共享库,因为它正在查找MyLib.dll。你有多确定你链接的库是静态的?