无法编译使用ALSA
问题描述:
我想在使用PortAudio接口的Debian GNU/Linux上创建一个C应用程序。要做到这一点,我必须从这个docs.无法编译使用ALSA
为此,我安装了libasound2-dev
编译我的程序与gcc -lrt -lasound -ljack -lpthread -o YOUR_BINARY main.c libportaudio.a
,我查了文件的使用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应正确安装,但是当我编译我的程序与此生成的文件:
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
。
如何正确链接此库?
答
您不必为libasound.a
-static
,你需要的是,也可以几乎肯定是刚刚从Makefile
删除-static
(可能在LDFLAGS
或CFLAGS
)。
这里有一个相关的Debian bug 522544和一个相关的Ubuntu bug #993959。
您可以从源代码编译自己的libasound,虽然它也使用其它的库(尤其是libpthread.so
,librt.so
和libdl.so
)我怀疑,当你建立了静态它可能会删除一些功能,但它在与./configure --enable-static
支持建立时间 (或尝试--enable-shared=no --enable-static=yes
)。
FWIW,使用静态二进制文件是“discouraged”由glibc的维护者,虽然我不同意...
答
编译我的代码,我用下面的命令
gcc -o rec_mic rec_mic.c -lasound
和它完美的工作,没有创建我自己的静态库。
你有32位和64位库,你的系统和gcc默认是什么? – 2013-03-09 13:01:50
我的系统默认是64位mulitarch:'3.2.0-4-amd64',而我的gcc是:'gcc version 4.7.2(Debian 4.7.2-5)''Target:x86_64-linux-gnu' 。 – tversteeg 2013-03-09 13:02:44
对于'-static',你没有'libasound.a' ...你不能链接一个静态二进制文件。 – 2013-03-09 13:06:30