Я создал программу на 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)
Вы не сказали - я предполагаю, что вы на 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
В двух словах, если вы не хотите распространять общую библиотеку, тогда любая функция вызов, который вы используете из общей библиотеки, должен быть создан и определен локально (т.е. в вашем исполняемом файле). – ryyker