0

我写了一个使用 Cryptopp 库的程序。我已经创建了静态库并将其包含在我的发行版中,但该程序还需要很多头文件。我的问题是我需要在我的发行版中包含所有这些头文件吗?

例如,我编写了一个使用 的代码des.hmodes.hfilters.h该代码又基于 Cryptopp 中的其他头文件,这是一个长链。我是否包含 Cryptopp 库中的所有头文件?

让它更通用,如果我编写一些使用其他库(如 Cryptopp 或 boost)的代码,我需要在发行版中包含什么?

更新:我想分发源代码,而不仅仅是二进制文件。这样用户可以根据需要从头开始编译我的程序。我包括静态库,但对头文件感到困惑。我需要把它们都包括进去吗?

4

2 回答 2

3

不,您只分发二进制文件。您不需要标题来运行程序。

但是,如果您要分发库(而不是程序),则需要提供标头。您的标头,而不是第三方标头。

您可以通过多种技术排除第三方标头,如果它们只是实现的一部分。如果没有,您还需要提供它们。假设您不需要它,并且您只在内部使用它们,您可以使用前向声明:

//MyClass.h
class ExternalClass;
class MyClass
{
   ExternalClass* p;
} ;

这样,您只需要在您的实现文件中包含第三方标头,无论如何您都不会分发它。

于 2012-03-11T20:09:43.860 回答
0

通常,您想做以下两件事之一:要么根本不分发库,要么完全按原样分发整个库。

如果您只是分发二进制可执行文件,那么第一个是有意义的。如果你正在分发源代码,你可以做任何一个。试图在两者之间做半途而废,只是分发你的代码所依赖的库的一部分,这是一个问题的根源。

于 2012-03-11T20:16:37.297 回答