【问题标题】:Compiling C program that uses a library编译使用库的 C 程序
【发布时间】:2014-02-10 22:29:24
【问题描述】:

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

【问题讨论】:

标签: c linker autotools


【解决方案1】:

许多软件包捆绑了它们的依赖项。示例: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 并动态链接到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2017-02-17
    • 2011-08-09
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多