繁体   English   中英

编译使用库的C程序

[英]Compiling C program that uses a library

我制作了一个使用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)

对于奖励积分,添加一个配置脚本,该脚本检查系统是否已经安装了libsndfile并动态链接到它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM