如何从头文件和源文件创建一个C库(用于Ubuntu)?

我正在寻找一个程序来创建一个C库(即链接和编译文件到一个文件)基于具有以下结构的.h文件和.c文件(它是一个FEC库:www。 openfec.org)。 我正在使用Ubuntu。 我希望它在不手动指定每个文件的情况下执行此操作。 我尝试了WAF,但得到了错误’错误:root:错误:没有名为cflags的模块’。

这是(部分)结构:

fec lib_advanced ldpc_from_file of_code_profile.h of_ldpc_ff.h ... lib_common linear_binary_codes_utils binary_matrix it_decoding ml_decoding statistics of_cb.h of_debug.h of_mem.c of_mem.h of_openfec_api.c of_openfec_api.h of_openfec_profile.h of_types.h 

谢谢!!

您必须使用gcc将C文件编译为对象文件。

然后你必须使用ar r然后使用ranlib将对象打包成一个.a库文件。

*nix系统上的C库(包括所有Linux发行版)都是使用标准工具创建的,这个工具是a)C编译器b)链接器b)ar实用程序c)ranlib实用程序。

C编译器99.9%的时间是GNU C编译器,而链接器ld和实用程序arranlib是gnu系统上的binutils包的一部分(99.9%的linux系统)。

arranlib用于创建静态库,将已编译的目标文件(* .o文件)放入存档文件libsomething.a使用ar并使用ranlib索引存档。

可以在gcc编译器内调用链接器来创建具有位置无关代码的动态库,同样已经编译的文件在特殊文件上存档,该文件具有共享对象的.so扩展名。

静态库用于速度和自包含,它们生成大型可执行文件,其中包含最终可执行文件中的所有依赖项。 如果单个库中有许多更改,要更新它,您将不得不重新编译所有内容。

动态库分别编译和链接可执行文件,它们可以由多个可执行文件同时使用,如果更新了一个库,则只需要重新编译单个库,而不是每个依赖于它的可执行文件。

这些工具的使用是通用的和标准的程序,它们可能因* nix系统到* nix系统的细节而有所不同,但在linux上你基本上总是使用GCC和Binutils软件包。 make,cmake,autotools等forms的额外构建实用程序可用于帮助完成该过程,但始终使用基本工具。

通常在最基本的级别上编写Makefile脚本,该脚本由make实用程序解释。 根据您的命令,它可以创建一种或两种类型的库,安装库和可执行文件,卸载它们,清理等等

欲获得更多信息 :

http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
http://www.dwheeler.com/program-library/Program-Library-HOWTO/