我正在尝试安装 pymedia:http://pymedia.org/在 ubuntu 上。我很乐意从源代码构建 pymedia 本身,因为这似乎是我唯一的选择,但如果可以避免的话,我宁愿不让其先决条件的源代码构建版本随处可见。
我安装了以下大部分先决条件:
sudo apt-get install python-dev libogg-dev libvorbis-dev libfaad-dev libasound2-dev libmp3lame-dev
然后我下载了 pymedia 源 tarball 并运行:
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
该错误与先决条件无关,很可能是错误的构建脚本。
如果我理解正确的话(我的 C-foo 很弱),64 位共享库必须使用 -fPIC 标志进行编译,而在这种情况下 sound.cpp 则不是。
在 pymedia 的 setup.py 中有一个名为 *disable_fPIC* 的函数,它强制 gcc 在没有它的情况下编译其所有库。您可以尝试禁用该函数(只需用 pass 语句替换所有代码)并尝试再次编译它。它应该是这样的:
def disable_fPIC():
pass
由于我的机器是 32 位的,因此我无法测试它,所以我只能希望它能有所帮助。