Невозможно связать библиотеку portaudio как статическую библиотеку - PullRequest
2 голосов
/ 03 апреля 2012

Мне нужно связать библиотеку (portaudio) как статическую библиотеку.Когда я выполняю следующее

arm-none-linux-gnueabi-gcc -static -L/media/Data/lib/.libs -lportaudio prova.cpp

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

/tmp/ccuoQi1J.o: In function `main':
prova.cpp:(.text+0x190): undefined reference to `Pa_Initialize'
prova.cpp:(.text+0x1bc): undefined reference to `Pa_GetDeviceCount'
prova.cpp:(.text+0x1d8): undefined reference to `Pa_GetDeviceInfo'
prova.cpp:(.text+0x248): undefined reference to `Pa_OpenDefaultStream'
prova.cpp:(.text+0x27c): undefined reference to `Pa_CloseStream'
prova.cpp:(.text+0x280): undefined reference to `Pa_Terminate'
collect2: ld returned 1 exit status

, в то время как без опции -static связывание не дает ошибок

arm-none-linux-gnueabi-g++ -L/media/Data/lib/.libs -lportaudio prova.cpp

Мне нужноссылка статически все библиотеки, это возможно?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Из опции связывания gcc ,

-static

В системах, поддерживающих динамическое соединение, это предотвращает соединение с общимбиблиотеки.В других системах этот параметр не действует.

Здесь все ваши неопределенные символы находятся в библиотеке libportaudio, которая является общей библиотекой, и вы запрещаете ссылаться на нее, указав -static и, следовательно,Ошибка.gcc не может найти статическую версию libportaudio в указанном пути к библиотеке (/media/Data/lib/.libs)

Почему вы хотите статически связать эту общую библиотеку?Любая конкретная причина?

Вы можете прочитать это, чтобы понять, как gcc обрабатывает разделяемые и статические библиотеки.

0 голосов
/ 13 ноября 2014

Если вы загрузили новейший источник для PA из http://www.portaudio.com/download.html и пытаетесь статически связать библиотеку с одной из их тестовых программ на OSX, попробуйте следующую команду make (перейдите в корневой каталог вашего скачанного каталога). папка portaudio первая):

gcc -Iinclude examples/paex_sine.c lib/.libs/libportaudio.a -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework CoreServices

Это создаст программу "a.out", которая будет генерировать синусоидальную волну в течение пары секунд. По крайней мере, это то, что случилось, когда я проверил это на Йосемити.

...