【问题标题】:When to use the Visual Studio Additional dependencies?何时使用 Visual Studio 附加依赖项?
【发布时间】:2011-05-03 06:11:13
【问题描述】:

在 C++ 中,您有头文件 (.h)、(.lib) 文件和 (.dll) 文件。

在 Visual Studio 中,您提供了在三个不同位置搜索这些文件的位置:

  1. 配置属性 => C/C++ => 常规 => 其他包含目录。 在这里,您列出了您想要搜索并提供的“包含”目录。

  2. 配置属性 => 链接器 => 常规 => 其他库目录。 在这里,您列出了您想要搜索和提供的“lib”目录。

  3. 配置属性 => 链接器 => 输入 => 其他依赖项。 您在此处明确指定要包含的 .lib 文件。

问题是:

Q1:如果您在#1 中指定了头文件,在#2 中指定了库,为什么/何时要在#3 中指定任何内容?

Q2:我看到有人在 #3 中包含特定的调试或发布版本的库。您能否在#3 中指定一个库的调试或发布版本,并且仍然以发布或调试模式构建?理想情况下,这里应该提供哪个版本的库调试/发布?

【问题讨论】:

    标签: c++ visual-studio linker


    【解决方案1】:
    1. 配置属性 => C/C++ => 常规 => 其他包含目录。您可以在此处列出要搜索并提供的“包含”目录。

    这告诉编译器在哪里寻找用尖括号括起来的头文件。这会影响编译器(或预处理器)的工作方式。

    1. 配置属性 => 链接器 => 常规 => 其他库目录。在这里,您列出了要搜索并使其可用的“lib”目录。

    这告诉链接器在哪里查找库(即,要查找的目录)。这会影响链接器(而不是编译器)的工作方式。

    1. 配置属性 => 链接器 => 输入 => 其他依赖项。您可以在此处明确指定要包含的 .lib 文件。

    这告诉链接器在这些目录中查找哪些库。这也会影响链接器的工作方式。

    Q1:通常如果你使用 2,你几乎肯定也需要使用 3。 3 告诉它要链接哪个库,2 告诉它在哪里可以找到该库。当然,它也可以是多个库。

    Q2:如果同时提供了调试库和发布库,您通常希望在调试构建中使用调试版本,在发布构建中使用发布版本。在对话框的左上角,您可以选择要修改的配置。通常,您需要为调试和发布指定目录,但要指定单独的库,一个用于调试,一个用于发布。

    【讨论】:

    • 谢谢!一个反例,仍然让我感到困惑......我正在使用 Boost 库之一,tokenizer。所以对于#1,我指定了 \include 目录的位置,然后在我的 .cpp 文件中,我只是这样做:#include "boost/tokenizer.hpp",这样我的程序就会成功运行。 - Q3:为什么我不必包含 \lib 库的位置(例如,#2 留空)以及 #3 也是如此(例如,如果我没有指定确切的库,我为什么能够链接与那个图书馆)。谢谢!
    • @user205834:有几种可能性。首先,许多 Boost 是仅包含头文件的库——也就是说,所有代码都在头文件中,您无需链接任何内容即可使用它。其次,对于确实使用库的部分,他们通常使用#pragma comment(lib, "libname")自动链接到库。
    【解决方案2】:

    为了指出显而易见的一点,您不必在项目的属性设置中添加任何正在使用的 .h 文件,因为您将它们明确包含在源代码中,它会在路径中查找标头你已经提供了。

    【讨论】:

      【解决方案3】:

      另外,在上面那些地方,当你添加一个目录时,查看 MACROS>> 按钮。 例如您可能希望为 32 位/64 位/发布和调试使用不同的库。您可以使用 ($ProjectDir) MACRO 提供相对链接,例如($DXSDK_DIR) MACRO 以确保您获得适合您的 directx 开发的库。

      所以我有 ($DXSDK_DIR)\Lib\x86 和 ($DXSDK_DIR)\Lib\x64,这也解决了在 32 位和 64 位 Windows 操作系统之间进行开发时的问题。

      【讨论】:

        【解决方案4】:

        关于您的第二季度...

        对于第 3 方库,我利用 Visual Studio Build Command 宏变量 $(Platform)$(Configuration) 输入如下内容:

        Y:\dev3\cpp\cryptopp\cryptopp561\$(Platform)\Output\$(Configuration);...
        

        这样,您只需输入完全相同的行,Visual Studio 会替换宏变量,并根据您激活的配置查看\cryptopp561\Win32\Output\Release\\cryptopp561\Win32\Output\Debug\。它实际上并没有节省多少打字,但它有助于保持一致和准确。

        【讨论】:

        • 不,在我的项目中我使用 $(Configuration)。我刚刚阅读了 $(ConfigurationName) 的文档,我想这也可以,但我还没有测试过。
        猜你喜欢
        • 2011-12-28
        • 2022-01-01
        • 2021-12-27
        • 1970-01-01
        • 2021-03-03
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多