2012-07-08 76 views

回答

1

此设置在VS2010中摸索了一下,它在以前的版本中更加清晰。您在屏幕截图中显示的设置出现在Tools + Options中。其中显示了核心意图,它们包含由Visual Studio及其组件确定的目录。 CRT,MFC,ATL和SDK库的位置。

链接器+输入+附加依赖关系设置非常重要,您可以准确地说出链接器链接的.lib文件。您可以指定.lib文件的路径并完成。但是,您仅指定.lib文件的名称并不罕见,然后编辑其他库目录以告知链接程序在哪里搜索这些.lib文件。如果Boost的安装位置不总是相同的,或者您想从一个Boost版本切换到另一个版本,那么这很方便。

因此,在总结:

  • 链接器+输入+附加依赖:添加您需要链接
  • 链接器+通用+附加库目录的.lib文件:如果你没有指定只使用的.libs的路径
  • VC++目录:不要惹它

请注意,最后两个b ullets仅指定目录,而非链接程序应链接的.lib文件。第一个项目符号指定实际的.lib文件。启动MSVC程序员总是困惑的是,链接器奇迹般地知道如何找到重要的.lib文件,而无需在“附加相关性”设置中明确指定它们。

这不幸是Visual C++的非可视部分。项目可以通过两种不同的方式指定.lib文件,链接器应该链接而不使用该设置。第一个是您选择用于启动项目的项目模板。它使用项目属性页,指定项目的默认设置的文件。您可以通过View = Other Windows + Property Manager查看它们。一个重要的是“Core Windows Libraries”,它设置Additional Dependencies设置来链接基本的Windows .lib文件,这些文件就像kernel32.lib和user32.lib一样。这些设置是由您的项目“继承”的。否则,如果您遇到过,请给“NoInherit”赋予意义。

第二个重要的方法是#pragma注释指令。它在源代码中使用,它注入一个链接器指令。 “lib”变体很重要,它告诉链接器链接.lib文件。 此外,与您在链接器的“附加依赖项”设置中明确指定的内容相对应。 vc/atlmfc/include/afx.h就是一个很好的例子。搜索“#pragma comment”。请注意根据编译器特定设置选择适当的mfc .lib文件的宏汤。 MFC需要链接的一堆额外的Windows .lib文件。

C++构建模型充满了曲折小段的迷宫。 IDE试图让你陷入成功之巅,但是在这个过程中隐藏了重要的一步,以达到理解的下一个层次。在C#中没有什么不同,因为知道如何使Reverse()扩展方法不消耗O(n)存储需要挖入。

+0

VC++目录下的库不会链接到输出中?那他们用了什么? – 2012-07-08 21:06:35

+1

不,该设置仅指定*目录*,不指定库。如果链接器仅具有文件名而不是.lib的完整路径名,链接器将搜索.lib的目录。查看许多库的头文件中使用的#pragma注释指令,告诉链接器某个.lib是必需的。这就是链接器知道链接的方式,例如,libcmt.lib链接CRT。您需要调整C#的思路,因为涉及多个工具,因此C++涉及更多。 – 2012-07-08 21:10:20

+0

增加了另一节讨论.lib文件。 – 2012-07-08 21:58:30

0

大多数(不是全部)库设有两组文件:

  • 头文件在源代码中包含(#include)目前正使用的库,提供函数,类常量或任何其他声明可能需要

  • 库文件是包含库的代码的二进制代码。链接器在组装最终可执行文件时使用这些设置