2012-04-03 9 views
2

Мне нужно связать библиотеку (portaudio) как статическую библиотеку. Когда я делаю следующееНевозможно связать библиотеку 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 

мне нужно, чтобы связать статически все LIBS, является Возможно?

ответ

2

От gcc linking options,

-static

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

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

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

Вы можете прочитать, чтобы понять больше о том, как GCC обрабатывает shared and static libraries.

+0

Я хочу связать статически эту общую библиотеку, потому что я не хочу ее устанавливать в целевой системе; это потому, что файловая система не является постоянной, и мне придется устанавливать библиотеку при каждой загрузке. Я не знаю, можно ли это сделать, может быть, мне нужно создать библиотеку для статической версии. – gc5

+0

Я пробовал следующее без каких-либо результатов: 'arm-none-linux-gnueabi-gcc -Wall -static -I ../ portaudio/include ../portaudio/lib/.libs/libportaudio.a prova.cpp ' и ' arm-none-linux-gnueabi-gcc -Wall -static -I ../ portaudio/include -L ../ portaudio/lib/.libs -lportaudio prova.cpp' . Библиотека с расширениями .a находится в каталоге «../portaudio/lib/.libs» – gc5

+0

сейчас я связываюсь следующим образом: '/ home/francesco/Dropbox/poli/bi/not/ip/cross/arm -2007q3/bin/arm-none-linux-gnueabi-gcc -Wall -static -I/home/francesco/Dropbox/poli/bi/not/ip/portaudio/include -L/home/francesco/Dropbox/poli/bi /not/ip/portaudio/lib/.libs prova.cpp'. Содержимое portaudio/lib/.libs является 'file ../portaudio/lib/.libs/* ../portaudio/lib/.libs/libportaudio.a: текущий архив ar ../portaudio/lib/.libs /libportaudio.la: символическая ссылка на '../libportaudio.la' ../portaudio/lib/.libs/libportaudio.lai: файл библиотеки libtool '. Кстати, я получаю тот же результат: | – gc5

0

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

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

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

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