Не удалось связать библиотеку Portaudio

Я сделал простой проект Makefile с использованием библиотек Portaudio, и проект отлично работал со следующим Makefile:

CXXFLAGS =  -O2 -g -Wall -fmessage-length=0
OBJS =      RecAudio.o
LIBS = ../Portaudio/portaudio/lib/.libs/libportaudio.a -lpthread -lrt -lasound
#LIBS = -lportaudio -lpthread -lrt -lasound
TARGET =    RecAudio
$(TARGET):  $(OBJS)
    $(CXX) -o $(TARGET) $(OBJS) $(LIBS)
all:    $(TARGET)
clean:
    rm -f $(OBJS) $(TARGET)

Я попытаюсь интегрировать библиотеки Portaudio в другой проект, созданный с помощью инструментов Automake. Я добавил библиотеку в файл Makefile.am следующим образом:

METASOURCES = AUTO
lib_LTLIBRARIES = libsounddevice.la
libsounddevice_la_SOURCES = AudioCapturePluginCommon.cpp SoundDevice.cpp SoundDeviceConfig.cpp
libsounddevice_la_LDFLAGS = -module
AM_CPPFLAGS = -D_REENTRANT
libsounddevice_la_LIBADD = portaudio/portaudio/lib/.libs/libportaudio.a -lACE -lxerces-c -llog4cxx -lorkbase -lpcap -lpthread -lrt -lasound
INCLUDES = -I@top_srcdir@ -I../../../orkbasecxx -I../common
AudioCapturePluginCommon.cpp:
    ln -s ../common/AudioCapturePluginCommon.cpp AudioCapturePluginCommon.cpp

но я получил следующую ошибку:

sr/bin/ld: portaudio/portaudio/lib/.libs/libportaudio.a(pa_front.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
portaudio/portaudio/lib/.libs/libportaudio.a: could not read symbols: Bad value

person daniele86    schedule 14.09.2015    source источник
comment
Почему бы не сделать так, как рекомендуется в сообщении об ошибке и флаге recompile with -fPIC?   -  person πάντα ῥεῖ    schedule 14.09.2015
comment
Программа уже скомпилирована с параметрами -fPIC и -DPIC. Всегда одна и та же проблема *** Предупреждение: Связывание разделяемой библиотеки libsounddevice.la с *** статической библиотекой /home/daniele/Desktop/Sviluppo/Portaudio/portaudio/lib/.libs/libportaudio.a не переносимо!   -  person daniele86    schedule 14.09.2015


Ответы (2)


Не связывайтесь с «-shared» со статической библиотекой.

Используйте общий "-lportaudio"

См. также Почему fPIC абсолютно необходим на 64, а не на 32-битных платформах?

person arved    schedule 14.09.2015
comment
Я уже использовал -lportaudio, и программа компилируется правильно, но когда я регистрирую Pa_GetDeviceCount(); У меня 0 аудиоустройств, вместо них их должно быть 7, как показывает другая программа, скомпилированная с библиотекой libportaudio.a. Любые идеи по этому вопросу? Спасибо - person daniele86; 14.09.2015

Я обнаружил проблему: когда я установил Portaudio, библиотеки portaudio были включены в путь /usr/local/lib, в то время как мой проект ищет библиотеки Portaudio в пути /usr/lib. Таким образом, я скопировал библиотеки из /usr/local/lib в /usr/lib и решил проблему (связав с -lportadio). Спасибо

С уважением Даниэле Элиа

person daniele86    schedule 14.09.2015