与C ++库的链接需要大量的麻烦,并且需要大量的知识和精力才能正确地做到这一点。这可能会使C ++学习者感到恐惧。
通常,特定C ++库的作者/维护者会牢记这一点,并会推荐其中一种方法。
换句话说,如果作者/维护者打算将库包含在头文件(仅 * .h和.hpp)中,或包含源文件( .h *或.c),则它在自述文件中会说得很清楚。或文档。
设计和维护为跨平台的库(并与多个C ++编译器供应商和环境兼容)通常将具有一个makefile系统或一个生成配置系统(例如CMake)。这些系统用于生成可消除平台差异的标头填充,并用于生成脚本,这些脚本将使用正确的命令行选项和正确的顺序在源文件上调用编译器和链接器。根据平台和配置的不同,这些构建系统可能包括或排除某些标头或源文件,或者它们可能定义或取消定义某些预处理器符号。
可能会违反作者/维护者的建议,但这始终需要大量的移植工作。移植工作所需的工作量可以等同于移植到不同的C ++环境。
因为Visual C ++使用自己的基于项目描述文件的构建系统(部分基于XML),所以它与Linux下使用的基于脚本的构建系统完全不同。CMake使用的方法是让CMake进行配置设置,然后发出整个Visual C ++项目结构,并将配置选项烘焙到* .vcxproj文件中。
如果在C ++与Visual C ++链接期间出现问题,则可以使用Visual Studio GUI(使用其项目属性页对话框)修改* .vcxproj文件中的生成设置。假定您已完全理解许多重要的C ++编译和链接设置的含义和后果。
现在是使用Visual C ++的最愚蠢的部分:如果您使用的是许多不同的第三方库,则更改所有库的构建设置都意味着进入每个* .vcxproj文件,然后在GUI上重复相同的更改次。麻烦了,但是,如果您知道如何正确进行,就可以做到。
大多数Visual C ++学习者通过观察由其错误代码标识的Visual C ++编译器和链接器错误,以较难的方式学习这些设置。例如,可以查找LNK2005,其表面意思是“符号符号定义不止一次”,但应了解重复的定义并非源于粗心的编程错误,而是可能由于某些错误而发生了。编译选项和链接选项的冲突或误用。
为了提供一种针对您情况的更具体和有用的答案,您将需要知道您打算使用的库的名称,以及链接错误或遇到的其他困难。您可以在相应图书馆的讨论区中找到这些问题的现有答案。这些问题往往带有“链接问题”,“窗口”和“ Visual C ++”的标签。
可以针对此问题进行初学者到专家的指南,但是它将针对特定项目。不同项目选择的不同首选项将需要完全重写该指南。