我制作了一个C程序,它使用libsndfile从音频文件中提取一些数据。
有什么可能使程序尽可能可移植,最好在安装时不需要根访问?
Libsndfile在目标计算机上不可用,因此我需要以某种方式将其与程序打包。有静态链接库的方法吗?我也看过一些自动工具教程,但我不知道如何继续。
我可以在我的开发机器上编译,在那里我使用包管理器安装了库: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的内容放入一个subdir中,并添加适当的规则以首先构建subdir。
未测试的示例代码:
OBJS+=libsndfile/libsndfile.a

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

为了获得额外的好处,添加一个配置脚本,检查系统是否已经安装了libsndfile并动态链接到它。

关于c - 编译使用库的C程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21689236/

10-11 12:51