2014-02-10 2 views
1

Я создал программу на C, которая использует libsndfile для извлечения некоторых данных из аудиофайлов.Компиляция программы C, которая использует библиотеку

Какие существуют возможности для обеспечения максимально возможной переносимости программы, не требуя при этом root-доступа при установке?

Libsndfile недоступен на целевых компьютерах, поэтому мне нужно каким-то образом упаковать его с помощью моей программы. Есть ли способ статически связать библиотеку? Я также изучил некоторые обучающие программы Autotools, но я не уверен, как действовать дальше.

я могу скомпилировать без задоринки на моем Dev машины, где я установил библиотеки с помощью менеджера пакетов: apt-get install libsnfile1-dev

Makefile, очень просто:

CFLAGS=-std=c99 -Wall -pedantic -g 
CLIBS= -lsndfile -lm 
BIN=audiodecode 
CC=gcc 

MAIN=main.o 

FILES= 

OBJS=$(FILES) $(MAIN) 

.PHONY: all 
all: clean $(OBJS) 
    $(CC) $(CFLAGS) -o $(BIN) $(OBJS) $(CLIBS) 

.PHONY: clean 
clean: 
    rm -f *.o $(BIN) 
+0

Вы не сказали - я предполагаю, что вы на Linux? В любом случае, я думаю, что ответы справа под Связанные - это то, что вы ищете ... например http://stackoverflow.com/questions/16027854/gcc-static-library-linking-vs-dynamic-linking или https://stackoverflow.com/questions/3181154/linking-gsl-or-other-library-static-into-a-shared-library – keshlam

+0

В двух словах, если вы не хотите распространять общую библиотеку, тогда любая функция вызов, который вы используете из общей библиотеки, должен быть создан и определен локально (т.е. в вашем исполняемом файле). – ryyker

ответ

0

Много пакетов связывайте их зависимостей , Примеры: rsync (содержит связанный libpopt), gnupg (содержит связанный libz). Другие зависимости, обычно входящие в комплект, - gettext или glib. Для вдохновения посмотрите, как это делают эти популярные проекты с открытым исходным кодом.

Поместите содержимое http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.25.tar.gz в поддиректор и добавьте соответствующие правила, чтобы сначала создать поддиректор.

Непроверено пример кода: OBJS + = libsndfile/libsndfile.a

libsndfile/libsndfile.a: 
     cd libsdndfile && ./configure --enable-static && $(MAKE) 

Для бонусных очков добавить скрипт настройки, что проверка, если система уже установлена ​​libsndfile и ссылку на него динамически.

Смежные вопросы