无法使用ALSA进行编译

时间:2013-03-09 12:57:38

标签: c linker alsa portaudio

我正在尝试在Debian GNU / Linux上创建一个使用PortAudio接口的C应用程序。为此,我必须使用此docs.

中的gcc -lrt -lasound -ljack -lpthread -o YOUR_BINARY main.c libportaudio.a编译我的程序

为此,我安装了libasound2-dev,并检查了文件使用的位置apt-file search libasound.so,这是输出:

lib32asound2: /usr/lib32/libasound.so.2
lib32asound2: /usr/lib32/libasound.so.2.0.0
lib32asound2-dev: /usr/lib32/libasound.so
libasound2: /usr/lib/x86_64-linux-gnu/libasound.so.2
libasound2: /usr/lib/x86_64-linux-gnu/libasound.so.2.0.0
libasound2-dev: /usr/lib/x86_64-linux-gnu/libasound.so

所以libasound应该正确安装,但是当我用这个makefile编译我的程序时:

DMXTest: main.c libdmx.a
    gcc -static -Wall main.c -L. -ldmx -lusb -lrt -lasound -ljack -lfftw3 -g -o main libportaudio.a

我收到以下错误:/usr/bin/ld: cannot find -lasound

如何正确链接此库?

2 个答案:

答案 0 :(得分:3)

libasound.a你没有-static,你需要它,或者你几乎可以肯定地从-static删除Makefile(可能在LDFLAGS }或CFLAGS)。

有一个相关的Debian错误522544,以及一个相关的Ubuntu错误#993959

您可以从源代码构建自己的libasound,但是它也使用其他库(特别是libpthread.solibrt.solibdl.so)我怀疑它可能会删除某些功能你静态地构建它,虽然它在构建时由./configure --enable-static支持 (或尝试--enable-shared=no --enable-static=yes)。

FWIW,glibc维护者使用静态二进制文件是“discouraged”,但我不同意......

答案 1 :(得分:3)

要编译我的代码,我使用了以下命令

gcc -o rec_mic rec_mic.c -lasound

它完美无缺,无需创建自己的静态库。