2013-03-09 152 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 

和它完美的工作,沒有創建我自己的靜態庫。