忽略#pragma comment(lib, ...)?

发布于 2024-07-20 06:24:26 字数 315 浏览 8 评论 0原文

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

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

#pragma comment(lib, ...)

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

例如,如果一段源代码执行以下操作:

#pragma comment(lib, foo.lib)

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

I'm attempting to perform a link of previously generated .obj files (using the latest version of MSVC).

When those .obj's were created, the source code specified:

#pragma comment(lib, ...)

As such, the linker is attempting to link against static libraries specified in the source. Is there a way to instruct the linker to ignore these libraries, so I can specify my own?

e.g., if a piece of source did the following:

#pragma comment(lib, foo.lib)

At link time, I'd like the linker to ignore 'foo.lib', and instead link against 'bar.lib'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

弃爱 2024-07-27 06:24:26

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

来自评论 MSDN 页面:

将库搜索记录放入目标文件中。 此注释类型必须附带一个注释字符串参数,其中包含您希望链接器搜索的库的名称(可能还有路径)。 库名称遵循目标文件中默认的库搜索记录; 链接器会搜索此库,就像您在命令行中命名它一样,前提是未使用 /nodefaultlib 指定该库。 您可以将多个图书馆检索记录放在同一个源文件中; 每条记录在目标文件中的出现顺序与在源文件中遇到的顺序相同。

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

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

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

Why not change the source (the #pragma directives)?

From comment MSDN page:

lib

Places a library-search record in the object file. This comment type must be accompanied by a commentstring parameter containing the name (and possibly the path) of the library that you want the linker to search. The library name follows the default library-search records in the object file; the linker searches for this library just as if you had named it on the command line provided that the library is not specified with /nodefaultlib. You can place multiple library-search records in the same source file; each record appears in the object file in the same order in which it is encountered in the source file.

If the order of the default library and an added library is important, compiling with the /Zl switch will prevent the default library name from being placed in the object module. A second comment pragma then can be used to insert the name of the default library after the added library. The libraries listed with these pragmas will appear in the object module in the same order they are found in the source code.

You can also use the NODEFALTLIB linker option to stop foo.lib from being linked, and specify bar.lib as you would other lib files (i.e. via the Linker Properties pane).

Otherwise, rename bar.lib to foo.lib (a cheeky solution).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文