查找资料,有提示说需为./configure 加–enable-shared 选项。清理并加–enable-shared后重新编译,果然除了.a之外,还产生了libpython.2.7.so和lypython.2.7.so.1.0两个文件,此二文件用md5sum检验,完全相同,而在make install之后,在/usr/local/lib中libpython2.7.so干脆就是.so.1.0文件的一个链接。将自己的C模块编译Makefile中的.a改为.so后,编译通过。
然而Python加–enable-shared配置后编译,出现很多问题,许多包编译失败,虽不影响当前使用,以后也许会出问题。所以这些错误提示也需要解决。
没想到这么快就找出原因了。出现的许多模块编译失败的原因,其实是因为在configure清理前,未执行make distclean所致。Python编译时会生成许多模块,最后组装成Python和libpython.2.7.a,在–enable-shared之前未执行distclean,导致原静态编译的各模块依然存在。这样在动态链接时把这些静态模块链入动态目标文件,当然要出问题。
make clean make distclean ./configure LDFLAGS=-L. --enable-shared make
彻底清理后,完全重新编译,同时指定查找库目录为当前正在编译的python目录,这样就能得到与未加–enable-shared参数时的静态编译时一样的结果了。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/400.html