我有一个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编译,那么为什么它要搜索动态库呢?我在上面的命令中犯了错误吗?
看起来你真的是用共享库链接的,你需要把包含MyLib.dll的文件夹的位置添加到PATH中,在命令提示符中键入这个。
SET PATH=<dll_location>;%PATH%
m.exe
或者确保MyLib.dll和m.exe在同一个文件夹中。
如果gcc只找到了一个共享库,那么有可能是静态标志没有起作用。
为什么你的库不叫libMyLib.a?MyLib.lib这个名字似乎意味着你从MSVC那里得到了它的预建库。如果是这样,你怎么知道MyLib.lib不是一个共享库?
有什么方法可以让你自己构建MyLib作为一个静态库?