Как создать C-библиотеку (для Ubuntu) из заголовочных и исходных файлов? - PullRequest
0 голосов
/ 12 февраля 2012

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

Спасибо !!

Ответы [ 2 ]

1 голос
/ 13 февраля 2012
Библиотеки

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/

1 голос
/ 13 февраля 2012

Вы должны использовать gcc для компиляции C-файлов в файлы объектов.

Затем вам нужно использовать ar r и затем ranlib, чтобы упаковать объекты в один файл библиотеки .a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...