我正在寻找一个基于具有以下结构的.h文件和.c文件来创建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
谢谢!
答案 0 :(得分:1)
您必须使用gcc
将C文件编译为对象文件。
然后你必须使用ar r
然后ranlib
将对象打包成一个.a库文件。
答案 1 :(得分:1)
*nix
系统上的C库(包括所有Linux发行版)都是使用标准工具创建的,这些工具是a)C编译器b)链接器b)ar实用程序c)ranlib实用程序。
C编译器99.9%的时间是GNU C编译器,而链接器ld和实用程序ar
和ranlib
是gnu系统上的binutils包的一部分(99.9%的linux系统) )。
ar
和ranlib
用于创建静态库,将已编译的目标文件(* .o文件)放入存档文件libsomething.a
中,并使用ranlib对存档编制索引。
可以在gcc编译器中调用链接器来创建具有位置无关代码的动态库,同样已经编译的文件在特殊文件上存档,该文件具有共享对象的.so
扩展名。
静态库用于速度和自包含,它们生成大型可执行文件,其中包含最终可执行文件中的所有依赖项。如果有许多更改的库,要更新它,您将不得不重新编译所有内容。
动态库分别编译和链接可执行文件,它们可以由多个可执行文件同时使用,如果更新了一个库,则只需要重新编译单个库,而不是每个依赖于它的可执行文件。
这些工具的使用是通用的标准程序,它们可能因* nix系统到* nix系统的细节而有所不同,但在linux上你基本上总是使用GCC和Binutils软件包。 make,cmake,autotools等形式的额外构建实用程序可用于帮助完成该过程,但始终使用基本工具。
通常在最基本的级别上编写Makefile
脚本,该脚本由make
实用程序解释。根据您的命令,它可以创建一种或两种类型的库,安装库和可执行文件,卸载它们,清理等等。
了解更多信息:
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
http://www.dwheeler.com/program-library/Program-Library-HOWTO/