Como instalar o pymedia sem compilar os prereqs do código-fonte?

1

Estou tentando instalar o pymedia: link no ubuntu. Estou bem em construir o próprio pymedia a partir do código-fonte, já que isso parece ser minha única opção, mas prefiro não ter versões construídas por origem de seus pré-requisitos por aí, se puder evitá-lo.

Eu instalei a maioria dos pré-requisitos com o seguinte:

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

Então baixei o tarball de origem do pymedia e executei:

python setup.py build

Com isso, obtenho:

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

O que parece bom. Eu bati sim .. e isso com erros com:

#...
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

O que dá?

    
por Tristan Havelick 20.10.2011 / 06:49

1 resposta

1

Este erro não está relacionado aos pré-requisitos, é provavelmente um script de construção ruim.

Se eu entendi isso correto (meu C-foo é fraco) 64bits bibliotecas compartilhadas devem ser compiladas com o sinalizador -fPIC e sound.cpp não é neste caso.

No setup.py do pymedia existe uma função chamada * disable_fPIC * que força o gcc a compilar todas as suas bibliotecas sem ele. Você pode tentar desativar essa função (apenas substitua todo o código por uma instrução pass) e tente compilá-lo novamente. É preciso ler algo assim:

def disable_fPIC():
    pass

Eu não posso testá-lo como minha máquina é 32bits, então eu só espero que ajude.

    
por Javier Rivera 20.10.2011 / 15:31