我写了一个使用Cryptopp库的程序。我已经创建了静态库,并将其包含在我的发行版中,但该程序还需要大量的头文件。我的问题是我需要将所有这些头文件包含在我的发行版中吗?
例如,我编写了一个使用des.h
,modes.h
和filters.h
的代码,后者又基于Cryptopp(长链)中的其他头文件。我是否包含Cryptopp库中的所有头文件?
使它更通用,如果我编写一些使用其他库(如Cryptopp或boost)的代码,我需要在发行版中包含哪些内容?
更新:我想分发源,而不仅仅是二进制文件。因此,如果我们愿意,用户可以从头开始编译我的程序。我包括静态库,但对头文件感到困惑。我是否需要将它们全部包括在内?
答案 0 :(得分:3)
不,您只分发二进制文件。您不需要标头来运行程序。
但是,如果您要分发库(而不是程序),则需要提供标头。您的标头,而非第三方标头。
如果第三方标头仅是实施的一部分,则可以通过多种技术排除第三方标头。如果没有,你也需要提供它们。假设您不需要它,并且只在内部使用它们,则可以使用前向声明:
//MyClass.h
class ExternalClass;
class MyClass
{
ExternalClass* p;
} ;
这样,您只需要在实现文件中包含第三方标题,无论如何都不会分发。
答案 1 :(得分:0)
通常,您希望执行以下两项操作之一:要么根本不分发库,要么完全按原样分发整个库。
如果您只分发二进制可执行文件,那么第一个是有意义的。如果您要分发源代码,则可以执行任何操作。试图在两者之间进行,只是分发代码所依赖的库的一部分是一个问题的处方。