【发布时间】:2021-05-27 06:53:18
【问题描述】:
我试图弄清楚 make 是如何处理 gcc 命令上的选项的:
我正在重建 Richard Dobson 的一个程序以将声音文件转换为浮点数,
它需要链接一个位于$HOME/.local/lib的静态库
如果我运行,项目构建没有问题
gcc -Wl,-rpath=$HOME/.local/lib -lm -o sf2float sf2float.c -lportsf
在堆栈交换的其他地方有一些非常有用的帖子,还有https://nullprogram.com/blog/2017/06/19/
我真的很想知道如何在 makefile 中运行这个命令。
我尝试了以下 makefile 的几种不同变体:
SHELL=bash
CC = gcc
CFLAGS = -Wall
LDFLAGS = -Wl,-rpath=$$HOME/.local/lib -lm -lportsf
OBJECTS = sf2float.o
BINARY = sf2float
all: sf2float
example: $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $(BINARY) $(LDFLAGS)
clean:
rm -f $(BINARY) $(OBJECTS)
这会返回编译器选项顺序略有不同的变化,然后在找不到静态库后会出现一堆错误:
gcc -Wl,-rpath=$HOME/.local/lib -lm -lportsf sf2float.o -o sf2float
/usr/bin/ld: sf2float.o: in function `main':
sf2float.c:(.text+0x64): undefined reference to `psf_init'
/usr/bin/ld: sf2float.c:(.text+0x9d): undefined reference to `psf_sndOpen'
/usr/bin/ld: sf2float.c:(.text+0xfd): undefined reference to `psf_getFormatExt'
/usr/bin/ld: sf2float.c:(.text+0x15b): undefined reference to `psf_sndCreate'
/usr/bin/ld: sf2float.c:(.text+0x210): undefined reference to `psf_sndReadFloatFrames'
/usr/bin/ld: sf2float.c:(.text+0x23b): undefined reference to `psf_sndWriteFloatFrames'
/usr/bin/ld: sf2float.c:(.text+0x268): undefined reference to `psf_sndReadFloatFrames'
/usr/bin/ld: sf2float.c:(.text+0x2c7): undefined reference to `psf_sndReadPeaks'
/usr/bin/ld: sf2float.c:(.text+0x38f): undefined reference to `psf_sndClose'
/usr/bin/ld: sf2float.c:(.text+0x39f): undefined reference to `psf_sndClose'
/usr/bin/ld: sf2float.c:(.text+0x3ca): undefined reference to `psf_finish'
collect2: error: ld returned 1 exit status
make: *** [<builtin>: sf2float] Error 1
看起来我的库的顺序有点混乱,老实说,我只是不完全确定这里发生了什么。正如我上面提到的那样,该项目正在建设中,但我想更清楚地理解这个问题。非常感谢任何帮助!
【问题讨论】:
-
将
-o $(BINARY)移动到Example目标的末尾。你在$(LDFLAGS)之前就已经得到了它,这显然不是有效的。 -
这条评论不对。
-o的顺序无关紧要。 -
这里的礼仪是始终勾选最佳答案...这让您询问一些声誉积分并给回答者一些积分,另外它告诉那些在家观看的人这是真正的答案。 .. 欢迎来到 SO
标签: c gcc audio makefile static-libraries