Как создать C-библиотеку (для Ubuntu) из файлов заголовка и источника?

Я ищу программу для создания C-библиотеки (т.е. для связывания и компиляции файлов в один файл) на основе .h-файлов и .c-файлов, которые имеют следующую структуру (это FEC-библиотека: www. openfec.org). Я использую Ubuntu. Я хочу, чтобы это делалось без указания каждого файла вручную. Я попробовал WAF, но получил ошибку «ERROR: root: error: No module 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 библиотеки.

Библиотеки C на системах *nix (включая все дистрибутивы linux) создаются со стандартными инструментами, причем эти инструменты являются a) компилятором C b) компоновщиком b) утилитой ar c) утилитой ranlib.

Компилятор C в 99,9% случаев компилятор GNU C, в то время как компоновщик ld и утилиты ar и ranlib являются частью пакета binutils в системах gnu (99,9% Linux-систем).

ar и ranlib используются для создания статических библиотек, помещая уже скомпилированные объектные файлы (* .o-файлы) в файл архива libsomething.a с ar и индексируя архив с 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/