我制作了一个使用 libsndfile 的 C 程序从音频文件中提取一些数据。
有什么可能使程序尽可能可移植,最好在安装时不需要 root 访问权限?
Libsndfile 在目标机器上不可用,所以我需要以某种方式将它与我的程序打包在一起。有没有办法静态链接库?我也看过一些 Autotools 教程,但我不确定如何继续。
我可以在我的开发机器上顺利编译,我使用包管理器安装了库: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)
最佳答案
很多包都捆绑了它们的依赖项。示例: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)
对于 Bonus points 添加配置脚本,检查系统是否已经安装了 libsndfile 并动态链接到它。
关于编译使用库的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689236/