我正在尝试执行以前生成的 .obj 文件的链接(使用最新版本的 MSVC)。
创建这些 .obj 时,源代码指定:
#pragma comment(lib, ...)
因此,链接器正在尝试链接源中指定的静态库。有没有办法指示链接器忽略这些库,所以我可以指定我自己的?
例如,如果一个来源做了以下事情:
#pragma comment(lib, foo.lib)
在链接时,我希望链接器忽略“foo.lib”,而是链接到“bar.lib”。
我正在尝试执行以前生成的 .obj 文件的链接(使用最新版本的 MSVC)。
创建这些 .obj 时,源代码指定:
#pragma comment(lib, ...)
因此,链接器正在尝试链接源中指定的静态库。有没有办法指示链接器忽略这些库,所以我可以指定我自己的?
例如,如果一个来源做了以下事情:
#pragma comment(lib, foo.lib)
在链接时,我希望链接器忽略“foo.lib”,而是链接到“bar.lib”。
为什么不更改源(#pragma
指令)?
从comment
MSDN 页面:
库
在目标文件中放置一个库搜索记录。此注释类型必须附带一个注释字符串参数,该参数包含您希望链接器搜索的库的名称(可能还有路径)。库名称遵循目标文件中的默认库搜索记录;如果没有使用 /nodefaultlib 指定该库,则链接器将搜索此库,就像您在命令行中命名它一样。您可以将多个图书馆搜索记录放在同一个源文件中;每条记录在目标文件中的出现顺序与在源文件中出现的顺序相同。
如果默认库和添加的库的顺序很重要,则使用 /Zl 开关进行编译将阻止将默认库名称放置在目标模块中。然后可以使用第二个注释编译指示在添加的库之后插入默认库的名称。与这些 pragma 一起列出的库将按照它们在源代码中的相同顺序出现在目标模块中。
您还可以使用NODEFALTLIB
链接器选项停止foo.lib
链接,并bar.lib
像指定其他 lib 文件一样(即通过链接器属性窗格)。
否则,重命名bar.lib
为foo.lib
(一个厚颜无耻的解决方案)。