使用某些库分发程序(源文件)
Distributing a program(source files) using some library
我写了一个使用Cryptopp库的程序。我已经创建了静态库,并将其包含在我的发行版中,但该程序还需要大量头文件。我的问题是我是否需要在我的发行版中包含所有这些头文件?
例如,我编写了一个使用des.h
、modes.h
和filters.h
的代码,而这些代码又基于Cryptopp(一个长链(中的其他头文件。我是否包含 Cryptopp 库中的所有头文件?
更通用地说,如果我编写一些使用其他库(如 Cryptopp 或 boost(的代码,我需要在发行版中包含哪些内容?
更新:我想分发源代码,而不仅仅是二进制文件。这样,如果我们愿意,用户可以从头开始编译我的程序。我包括静态库,但对头文件感到困惑。我需要将它们全部包括在内吗?
不,您只分发二进制文件。您不需要标头来运行程序。
但是,如果您要分发库(而不是程序(,则需要提供标头。您的标头,而不是第三方标头。
您可以通过多种技术排除第三方标头,前提是它们只是实现的一部分。如果没有,您还需要提供它们。假设你不需要它,并且你只在内部使用它们,你可以使用前向声明:
//MyClass.h
class ExternalClass;
class MyClass
{
ExternalClass* p;
} ;
这样,您只需要在实现文件中包含第三方标头,无论如何您都不会分发该文件。
通常,您需要执行以下两件事之一:要么根本不分发库,要么完全按原样分发整个库。
如果您只分发二进制可执行文件,则第一个是有意义的。如果要分发源代码,则可以执行任一操作。试图在两者之间做一半,只分发代码所依赖的库的部分是出现问题的秘诀。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何打印源文件中与 GDB 中的程序流关联的所有行号
- 将源文件扩展名从 .m 更改为 .mm 在屏幕保护程序项目的 Xcode 9.3 中失败
- 如何使用doxygen记录应用程序源文件
- 如何在Ubuntu上的G 中编译一个程序,具有多个源文件
- 修改OBJ文件链接到的源文件会破坏应用程序吗
- 在C++程序或静态类中具有函数的C源文件
- 使用某些库分发程序(源文件)
- OpenCL程序生成错误:源文件不是有效的UTF-8
- c++程序中多个源文件中的相同头文件
- 在程序源文件中使用脚本变量OMP_NUM_THREADS
- C/ c++应用程序项目(NetBeans)中的多个源文件
- 如何修复错误并向源文件添加功能,同时保证不会破坏某些应用程序
- 在哪里可以找到具有多个源文件的中型开源 C(也C++)程序 (> 15)