2013-03-09 140 views
1

我想在使用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

如何正确链接此库?

+0

你有32位和64位库,你的系统和gcc默认是什么? – 2013-03-09 13:01:50

+0

我的系统默认是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

+1

对于'-static',你没有'libasound.a' ...你不能链接一个静态二进制文件。 – 2013-03-09 13:06:30

回答

3

您不必为libasound.a-static,你需要的是,也可以几乎肯定是刚刚从Makefile删除-static(可能在LDFLAGSCFLAGS)。

这里有一个相关的Debian bug 522544和一个相关的Ubuntu bug #993959

您可以从源代码编译自己的libasound,虽然它也使用其它的库(尤其是libpthread.solibrt.solibdl.so)我怀疑,当你建立了静态它可能会删除一些功能,但它在与./configure --enable-static支持建立时间 (或尝试--enable-shared=no --enable-static=yes)。

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

+0

但我创建了自己的静态库'libdmx.a';我怎样才能使用该库,然后当我删除'-static'行? – tversteeg 2013-03-09 13:25:52

+1

'-static'控制最终结果,“dynamic”不阻止使用'.a'文件,它们实际上只是'.o'文件的库。所以你可以*通常在动态可执行文件中使用'libdmx.a'(通常情况相反)。否则,你可以用'-shared'重新创建你的库吗? – 2013-03-09 13:29:04

+0

谢谢,确实是这个问题,现在它的工作! – tversteeg 2013-03-09 13:36:24

2

编译我的代码,我用下面的命令

gcc -o rec_mic rec_mic.c -lasound 

和它完美的工作,没有创建我自己的静态库。