编译使用库的C程序

时间:2014-02-10 22:29:25

标签: c linker autotools

我制作了一个C程序,使用libsndfile从音频文件中提取一些数据。

有什么可能使程序尽可能便携,最好在安装时不需要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)

1 个答案:

答案 0 :(得分: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并动态链接到它。