我製作了一個C程序,它使用libsndfile從音頻文件中提取一些數據。編譯使用庫的C程序
有什麼可能使程序儘可能便攜,最好在安裝時不需要root權限?
Libsndfile在目標機器上不可用,所以我需要以某種方式將它與我的程序打包在一起。有沒有辦法靜態鏈接庫?我也看過一些Autotools教程,但我不知道如何繼續。
我可以沒有我的dev的機器,我在那裏安裝使用軟件包管理器庫上順利編譯:apt-get install libsnfile1-dev
生成文件很簡單:
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-statically-into-a-shared-library – keshlam
簡而言之,如果你不想分發共享庫,那麼任何函數調用你使用共享庫,將不得不在本地創建和定義(即在你的可執行文件中)。 – ryyker