如何部署C静态库:header + c文件或object文件?

How to deploy a C static library: header + c file or object file?

我创建了一个带有一些功能的小型库。它有一个 .h 文件和一个 .c 文件。假设它是 'hello world'。我想把它放在我的 Github 上,让每个人都可以在他们的 C 或 C++ 代码中克隆和使用我的函数。我有两种看法:

  1. 把header和函数代码放出来告诉大家在自己的程序里#include "library"
  2. 拿出 header(供参考)和 object 文件 .o 并告诉大家在自己编译期间 link 它。

我该怎么办?创建 C/C++ 库的首选方法或标准是什么?

编辑:

跟进问题:有没有一种方法可以在我的存储库中准备一个安装文件,这样用户就可以安装我的库,以后可以将其作为 #include <library> 包含进来,而无需将我的文件放入他的工作中目录?

我将忽略有关 "preferred" 的问题,因为它深入探讨了意见问题。不过,涵盖一些优点和缺点的争议较小。请不要假设此列表是详尽无遗的。

1) Put out the header and the functions code and tell everyone to #include "library" in their programs.

由于这不是 header-only 库,因此仅 #include header 文件是不够的。其他人需要 #include header 文件 编译您的源文件作为他们项目的一部分。无论如何,这不是 "static library" 通常的意思。但是,对于足够小的 "library" 只需要一个源文件就足够了。

2) Put out the header (for information) and the object file .o and tell everyone to link it during compilation themselves.

这种方法的两个部分都有问题。首先,header 不仅仅是为了提供信息;其他人需要 #include 它以便他们的编译器知道你的 API。其次,object 个文件 (.o) 可以是 compiler-specific,因此这种方法仅对那些使用与您完全相同的构建环境的人有用。这可能会缩小范围,使这种方法的使用可以忽略不计。不过,请使用您自己的判断。

既然我们没有你的想法,让我们继续看其他的。

3) 将代码编译为静态库.a on Linux, .lib on Windows), 然后分发 header 文件和库文件。其他人会 #include 他们代码中的 header 文件和 link 针对您的库。

这里需要注意的是图书馆是 platform-specific。这比 compiler-specific 限制更少,但它仍然可能意味着您需要针对不同平台发布多个版本。其他人也有责任将库文件复制到适当的目录。新手程序员可能不知道哪些目录是合适的。

4) 拿出 header 文件、源代码和一个 可以让其他人编译和为自己安装你的图书馆。然后他们会 #include 他们的代码中的 header 文件和 link 针对你的图书馆。

这是对您的最终用户限制最少的方法,但它确实需要您提供良好的 makefile 才能成功。这将带您进入 C 和 C++(顺便说一句,不同的语言)之外的编程世界。

对于其他项目,makefile 方法的一个潜在缺点是最终用户可能没有安装(支持的)编译器。幸运的是,静态库开发人员可能会假设他们的最终用户拥有编译器。 :)

注意Git的重点是分享源码。如果您认为 Github 是您的 主要 分发方法,那么您应该查看涉及分发源代码的选项。另一方面,您需要一个 pre-compiled 选项,您应该考虑将 Github 以外的其他东西作为您的主要分发方法。