Невозможно скомпилировать с помощью ALSA

Я пытаюсь создать приложение C в Debian GNU/Linux, которое использует интерфейс PortAudio. Для этого я должен скомпилировать свою программу с помощью 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 должен быть установлен правильно, но когда я компилирую свою программу с этим make-файлом:

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.

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


person tversteeg    schedule 09.03.2013    source источник
comment
У вас есть 32- и 64-битные библиотеки, какая у вас система и gcc по умолчанию?   -  person mr.spuratic    schedule 09.03.2013
comment
Моя система по умолчанию — 64-битная с мультиархивом: 3.2.0-4-amd64, а мой gcc: gcc version 4.7.2 (Debian 4.7.2-5) с Target: x86_64-linux-gnu.   -  person tversteeg    schedule 09.03.2013
comment
У вас нет libasound.a для -static... вы не можете связать статический двоичный файл.   -  person mr.spuratic    schedule 09.03.2013
comment
Но я просто следовал инструкциям из документации отсюда portaudio.com/docs/v19-doxydocs /compile_linux.html, как мне это сделать?   -  person tversteeg    schedule 09.03.2013


Ответы (2)


У вас нет 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, использование статических двоичных файлов "не рекомендуется" сопровождающими glibc, хотя я не не согласен...

person mr.spuratic    schedule 09.03.2013
comment
Но я создал свою собственную статическую библиотеку, libdmx.a; как я могу использовать эту библиотеку, когда я удаляю строку -static? - person tversteeg; 09.03.2013
comment
-static контролирует конечный результат, динамический не препятствует использованию .a файлов, на самом деле это просто библиотеки из .o файлов. Таким образом, вы можете обычно использовать libdmx.a в динамическом исполняемом файле (как правило, обратное неверно). В противном случае вы можете воссоздать свою библиотеку с помощью -shared? - person mr.spuratic; 09.03.2013

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

gcc -o rec_mic rec_mic.c -lasound

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

person sashaVR    schedule 14.01.2014
comment
Странно, но здесь то же самое. У меня нет asound.so, но есть libasound.so. - person Alan Corey; 07.10.2020