2013-03-09 5 views
1

Я пытаюсь создать приложение C на Debian GNU/Linux, которое использует интерфейс PortAudio. Для этого я должен скомпилировать свою программу с gcc -lrt -lasound -ljack -lpthread -o YOUR_BINARY main.c libportaudio.a из этого docs.Не удается скомпилировать с использованием ALSA

Для этого я установил 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.

Как правильно связать эту библиотеку?

+0

У вас есть 32 и 64-разрядные библиотеки, какая у вас система и gcc по умолчанию? –

+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

+1

У вас нет 'libasound.a' для' -статического' ... вы не можете связать статический двоичный файл. –

ответ

3

Вы не libasound.a для -static, вы будете нуждаться в том, что, или вы можете почти наверняка просто удалить -static из Makefile (вероятно, в LDFLAGS или CFLAGS).

Есть связанная ошибка Debian 522544 и связанная ошибка Ubuntu #993959.

Вы можете создать свой собственный libasound из источника, хотя, как он также использует другие библиотеки (в частности libpthread.so, librt.so и libdl.so) Я подозреваю, что он может удалить некоторые функциональные возможности, когда вы строите его статически, хотя она поддерживается с ./configure --enable-static на время сборки (или попробуйте --enable-shared=no --enable-static=yes).

FWIW, использование статических бинарников «discouraged» по GLibC сопровождающих, хотя я не согласен ...

+0

Но я создал свою собственную статическую библиотеку 'libdmx.a'; как я могу использовать эту библиотеку тогда, когда я удаляю строку '-статический'? – tversteeg

+1

'-static' управляет конечным результатом,« динамический »не предотвращает использование файлов' .a', они на самом деле являются просто библиотеками '.o'-файлов. Таким образом, вы * можете * обычно использовать 'libdmx.a' в динамическом исполняемом файле (наоборот, это не так). В противном случае вы можете воссоздать свою библиотеку с помощью '-shared'? –

+0

Спасибо, что это действительно проблема, теперь это работает! – tversteeg

2

Чтобы скомпилировать мой код я использовал следующую команду

gcc -o rec_mic rec_mic.c -lasound 

и он работает отлично, без создания моей собственной статической библиотеки.

 Смежные вопросы

  • Нет связанных вопросов^_^