使用dll库时,是否需要包含用于构建dll的所有头文件?

use*_*721 6 c++ dll shared-libraries

我已经.dll从C++源代码构建了一个共享库().

现在当我想在另一个程序中使用这个库时,我是否需要包含最初用于构建库的所有头文件,或者只包括属于我(新)程序中使用过的函数的头文件?库中有许多函数没有直接在我的新程序中使用,但不用说,所有这些函数都被程序中的函数使用.

(所以他们也间接地在程序中使用,如果没有必要包含它们会很奇怪.)

Rei*_*ica 10

头文件并不神奇,它们只是确保.cpp文件可以访问所需的所有声明和定义的便捷方式.因此,只包括您在每个文件中实际需要的那些(1).

以上是指#include在您的文件中放置语句 - 仅对您实际需要使用的头文件执行此操作.当然,您包含的#include头文件本身也可以包含其他头文件.

与任何其他性能良好(即实际可用)的DLL一样,您的DLL必须提供一组公共接口头文件.在正常情况下,您必须具有可用于使用该DLL构建程序的所有这些公共接口头文件.这并不意味着你应该#include全部; 恰恰相反,你不应该.编译器(实际上是预处理器)将#include满足它的需要.

请注意,当DLL本身构建时,可能涉及更多的头文件,但这些头文件是实现的私有,而不是公共接口的一部分.您不需要它们使用DLL构建程序,在一般情况下,您甚至无法访问它们.

因此,在设计自己的DLL时,必须严格区分公共和内部头文件.公共头文件必须可供客户端使用,内部文件不需要(除非客户端应该自己构建DLL).当然,这意味着公共头文件可能永远不会#include是内部头文件.


(1)请注意,头文件包含纯粹是文本的 - 在读取源文件时,预处理器有效地复制头文件的内容并将其粘贴到#include语句的位置,然后继续解析.你自己做了这个复制和粘贴,文件也会构建和运行.当然,它不会在头文件中找到后来的更改,这是首先使用头文件的主要原因.