使用某些库分发程序(源文件)

Distributing a program(source files) using some library

本文关键字:程序 源文件      更新时间:2023-10-16

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

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

更通用地说,如果我编写一些使用其他库(如 Cryptopp 或 boost(的代码,我需要在发行版中包含哪些内容?

更新:我想分发源代码,而不仅仅是二进制文件。这样,如果我们愿意,用户可以从头开始编译我的程序。我包括静态库,但对头文件感到困惑。我需要将它们全部包括在内吗?

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

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

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

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

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

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

如果您只分发二进制可执行文件,则第一个是有意义的。如果要分发源代码,则可以执行任一操作。试图在两者之间做一半,只分发代码所依赖的库的部分是出现问题的秘诀。