事件:
我在百度github上下载了Familia相似度计算的开源项目,在liniux服务器上编译的过程中出现libpython.a无法读取符号的错误,错误发生项目编译时生成动态库fimilia.so的过程中。
错误代码:
libpython3.6m.a(abstract.o):
relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object;
recompile with -fPIC.
/usr/local/lib/libpython3.6m.a: could not read symbols: Bad value.
解决:
网上各种搜索后,找到错误原因。原来是python在编译的时候没有执行 -fPIC命令,于是参考文献2重新编译python;
终端进入到python源码所在文件夹,终端中输入命令:
cd 源码目录
./configure --prefix=/usr/local --enable-shared CFLAGS=-fPIC
make
make install
重新编译之后发现还是报同样的错误;
又参考文献1;
删除了源码object文件夹下所有的 静态文件,
即.o文件;
依然报错;
这时观察最后错误信息,
查看libpython.o所在的文件夹后发现,
该文件夹中的libpytho是老版本的,
直接删掉,
什么都不改;
再次编译项目,
成功!!!
解决问题真幸福,
晚饭都忘了吃。