Как установить pymedia без компиляции prereq из исходного кода?

Я пытаюсь установить pymedia: http://pymedia.org/ на Ubuntu. Я в порядке с созданием самого pymedia из исходного кода, поскольку это кажется моим единственным вариантом, но я бы предпочел, чтобы исходные версии его предпосылок не лежали без дела, если бы я мог избежать этого.

Я установил большинство предварительных требований со следующим:

sudo apt-get install python-dev libogg-dev libvorbis-dev libfaad-dev libasound2-dev libmp3lame-dev

Затем я скачал tarball исходного кода pymedia и запустил:

python setup.py build

С этим я получаю:

OGG          : found
VORBIS       : found
FAAD         : found
MP3LAME      : found
VORBISENC    : found
ALSA         : found
Continue building pymedia ? [Y,n]:

Что выглядит хорошо. Я нажал «да», и это приводит к ошибкам:

#...
g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions build/temp.linux-x86_64-2.6/sound/sound.o build/temp.linux-x86_64-2.6/sound/resample.o build/temp.linux-x86_64-2.6/sound/fft.o -logg -lvorbis -lfaad -lmp3lame -lvorbisenc -lasound -o build/lib.linux-x86_64-2.6/pymedia/audio/sound.so
/usr/bin/ld: build/temp.linux-x86_64-2.6/sound/sound.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
build/temp.linux-x86_64-2.6/sound/sound.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
error: command 'g++' failed with exit status 1

Что дает?

1
задан 20 October 2011 в 17:13

1 ответ

Эта ошибка не связана с предварительными требованиями, скорее всего, это плохой сценарий сборки.

Если я правильно понимаю (мой C-foo слаб), 64-битные разделяемые библиотеки должны быть скомпилированы с флагом -fPIC, а sound.cpp в этом случае нет.

В файле setup.py pymedia есть функция с именем * disable_fPIC *, которая заставляет gcc компилировать все свои библиотеки без него. Вы можете попытаться отключить эту функцию (просто замените весь код оператором pass) и попробуйте скомпилировать ее снова. Он должен прочитать что-то вроде этого:

def disable_fPIC():
    pass

Я не могу проверить это, поскольку моя машина 32-битная, поэтому я могу только надеяться, что это поможет.

0
ответ дан 20 October 2011 в 17:13

Другие вопросы по тегам:

Похожие вопросы: