【问题标题】:Impact of "Ignore specific library" in Visual StudioVisual Studio 中“忽略特定库”的影响
【发布时间】:2009-08-22 17:00:16
【问题描述】:

我正在使用作为静态库交付给客户的 API。 该库又利用了另一个使用英特尔编译器构建的第三方库。这个库依赖于我不拥有的一些英特尔库。当我构建一个测试应用程序时,我通过在 Visual Studio 的“忽略特定库”中指定这些库来解决这个问题。这里实际发生了什么? VS 在哪里得到这些符号呢?还有

这样做会删除英特尔编译器的预期优化吗?

如果我获得这些库,是否会导致链接到我的库的可执行文件受到处理器限制?

【问题讨论】:

    标签: c++ visual-studio linker intel


    【解决方案1】:

    引用 VS 文档,这个选项...

    ...让您删除指定的库或 图书馆列表中的图书馆 它在解析外部时搜索 参考。链接器解析 对外部定义的引用 首先在您的图书馆中搜索 明确指定,然后在默认情况下 指定的库 /DEFAULTLIB 选项,然后在 .obj 文件中命名的默认库。

    即它告诉链接器在解析符号时不要考虑指定的库。只要链接器可以在其他库中找到符号,那么链接就不会失败。

    如果您没有库,那么我很惊讶您需要指定任何内容 - 我看不出这会有什么影响。

    如果您想查看链接器实际执行的操作,请将“显示进度”选项设置为 /VERBOSE 并重新链接。

    【讨论】:

    • 是的,我在 MSDN 上看到了那段。但在我的情况下,我猜第 3 方库(或它的一些目标文件)必须以某种方式告诉链接器它更喜欢与英特尔的库链接。所以问题仍然存在 - 忽略这个“请求”会影响性能吗? (不过我会尝试 /VERBOSE 选项)
    • 库可能通过#pragma comment (linker ...) 指令指定英特尔库。您知道现在在非英特尔库中发现了哪些符号吗?我想英特尔库中的实现可能比您现在链接的任何内容都进行了优化 - 如果不了解更多关于英特尔库以及您现在链接到的任何内容,就无法肯定地说。老实说,我更担心他们做完全不同的事情。
    • 谢谢,我现在使用 dumpbin 分析了 3rd 方库的一个目标文件,发现它有“defaultlib:”条目(libirc.lib、svml_disp.lib 等)。当我选择忽略这些库时,我不确定如何看到哪些符号受到影响,但也许已经消失了。我猜这个问题的核心是——第三者是否认为他们通过使用英特尔编译器构建是在帮我们一个忙,并且当我们无论如何都不使用优化的实现时,这个帮助是否变得毫无价值......
    • 他们的代码中可能有 #pragma comment(lib, "something.lib") 以引入代码认为需要的依赖项。我猜你永远不会调用任何使用使用 something.lib 的代码路径的东西。
    猜你喜欢
    • 1970-01-01
    • 2016-11-02
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多