【问题标题】:g++ link against static library does not work针对静态库的 g++ 链接不起作用
【发布时间】:2020-06-04 15:52:13
【问题描述】:

我有一个简单的文件 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 进行编译,那么它为什么要搜索动态库?我在上面的命令中有错误吗?

【问题讨论】:

  • 有理由在 Windows 上使用 gcc 吗?
  • 我没有 dll 文件。我只有一个 lib 文件。 这是您评论中的重要信息,应该添加到问题中。由于您链接 MyLib.lib 然后得到“找不到 MyLib.dll”,因此您链接到了不正确的 MyLib.lib,即与 MyLib.dll 链接的库

标签: c++ windows g++ static-linking lib


【解决方案1】:

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

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

或确保 MyLib.dll 与 m.exe 位于同一文件夹中。

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

为什么你的库不叫 libMyLib.a? MyLib.lib 这个名字似乎暗示你是从 MSVC 预构建的。如果是,你怎么知道 MyLib.lib 不是共享库?

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

【讨论】:

  • 我没有 dll 文件。我只有一个lib文件。该库仅在静态版本中。
  • 您似乎已链接到共享库,因为它正在寻找 MyLib.dll。你有多确定你链接的库是静态的?
猜你喜欢
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2011-04-11
相关资源
最近更新 更多