【问题标题】:Ignore #pragma comment(lib, ...)?忽略#pragma 注释(lib,...)?
【发布时间】:2009-05-13 20:01:45
【问题描述】:

我正在尝试执行以前生成的 .obj 文件的链接(使用最新版本的 MSVC)。

创建这些 .obj 时,指定的源代码:

#pragma comment(lib, ...)

因此,链接器正在尝试链接源中指定的静态库。有没有办法指示链接器忽略这些库,以便我可以指定自己的库?

例如,如果一个来源做了以下事情:

#pragma comment(lib, foo.lib)

在链接时,我希望链接器忽略“foo.lib”,而是链接到“bar.lib”。

【问题讨论】:

    标签: visual-studio linker visual-c++ nmake pragma


    【解决方案1】:

    为什么不更改源(#pragma 指令)?

    来自commentMSDN 页面:

    在目标文件中放置一个库搜索记录。此注释类型必须伴随一个 cmetstring 参数,其中包含您希望链接器搜索的库的名称(可能还有路径)。库名称遵循目标文件中的默认库搜索记录;如果没有使用 /nodefaultlib 指定该库,则链接器将搜索此库,就像您在命令行中命名它一样。您可以将多个图书馆搜索记录放在同一个源文件中;每条记录在目标文件中的出现顺序与在源文件中出现的顺序相同。

    如果默认库和添加的库的顺序很重要,使用 /Zl 开关进行编译将阻止将默认库名称放置在目标模块中。然后可以使用第二个注释编译指示在添加的库之后插入默认库的名称。与这些 pragma 一起列出的库将按照它们在源代码中的相同顺序出现在目标模块中。

    您还可以使用 NODEFALTLIB 链接器选项来停止链接 foo.lib,并像其他 lib 文件一样指定 bar.lib(即通过链接器属性窗格)。

    否则,将 bar.lib 重命名为 foo.lib(一个厚颜无耻的解决方案)。

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2021-05-11
      • 2011-11-13
      • 2012-07-16
      • 2011-09-15
      • 1970-01-01
      相关资源
      最近更新 更多