我在我的计算机上使用多个版本的Python:2.6.6
,2.7.6
和2.7.9
。当我用boost-python编译Boost时,我必须让Python在参数中使用。如果我想兼容,有我为每个Python版本编译Boost?(这是相当巨大!)或者是有没有办法只使用一个版本的Boost与几个Python版本?使用多个Python版本构建Boost
回答
官方Python development cycle没有描述发布之间应用程序二进制接口(ABI)的稳定性。对于Python 3.2之前的版本,ABI不兼容。对于3.2及更高版本,PEP 384定义了stable ABI,其中Python/C API的子集保证保持ABI兼容性。要构建Boost.Python和扩展模块,需要定义Py_LIMITED_API
。
虽然它主要取决于Python的/ C API类型和功能被直接用于用户代码或通过Boost.Python的,在一般情况:
- 为主要级的版本中,例如Python 2和Python 3,Boost.Python的和用户代码将需要重新编译
- 为次要级的版本中,例如Python 2.6和Python 2.7,Boost.Python的和用户代码可能需要重新编译
- 为微观层面的版本中, Boost.Python和用户代码很少需要重新编译
在需要重新编译Boost.Python的所有情况下,都不需要重新编译其他Boost库。当构建Boost.Python的多个版本时,验证清洁构建发生。如果没有干净的构建,Boost.Python可能会构建,但无法正确链接。例如,PyClass_Type
符号不应该在Python 3 Boost.Python的构建引用,但没有一个干净的构建,以前的版本文物可以填充库:
$ ./bootstrap.sh --with-python=/usr/bin/python2
...
Detecting Python version... 2.7
$ ./b2 --with-python --buildid=2 # produces libboost_python-2.so
$ ./bootstrap.sh --with-python=/usr/bin/python3 --with-python-root=/usr
...
Detecting Python version... 3.3
$ ./b2 --with-python --buildid=3noclean # produces libboost_python-3noclean.so
$ ./b2 --with-python --clean
$ ./b2 --with-python --buildid=3 # produces libboost_python-3.so
$ nm -D stage/lib/libboost_python-2.so | grep PyClass_Type
U PyClass_Type
$ nm -D stage/lib/libboost_python-3noclean.so | grep PyClass_Type
U PyClass_Type
$ nm -D stage/lib/libboost_python-3.so | grep PyClass_Type
注意的是,即使3noclean
生成已对Python的建3,以前使用Python 2的版本会产生污染3noclean
库的工件。此外,请注意,Boost.Python和用户代码可能需要重新编译以匹配Python的CPU体系结构和UCS-2或UCS-4 unicode配置。
感谢您的回答! – Caduchon 2015-03-06 11:57:33
- 1. 当使用Boost Interprocess 1.60版本构建
- 2. 使用HDF5构建Boost Python
- 3. 用多个sdk版本构建cordova
- 4. 如何用多个jdk版本的Gradle构建多个项目?
- 5. Boost链接问题 - 多个版本
- 6. Git多个版本分支,构建自动增量版本号
- 7. 使用MinGW构建Boost 1.45
- 8. 运行多个python版本
- 9. 处理多个Python版本?
- 10. 当我安装了多个Visual Studio版本时,如何使用Visual Studio 2008构建boost?
- 11. 使用多个Silverlight版本
- 12. 使用构建配置在Visual Studio中创建项目的多个版本
- 13. 在构建服务器上构建相同应用程序的多个版本
- 14. 常春藤构建 - 不同版本的多个构件
- 15. 使用Mercurial自动构建版本号
- 16. 使用Xcode 4运行版本构建
- 17. Heroku使用旧版本的package.json构建
- 18. 多个jQuery版本[建议]
- 19. 构建iPhone应用程序在多个设备和版本
- 20. Android版本构建
- 21. 扩建 - 使用不同的Python版本
- 22. 使用boost库的DLL版本
- 23. 在旧版本的boost中使用recursive_directory_iterator?
- 24. 构建Boost库
- 25. cmake:构建一个程序的多个版本
- 26. 使用Boost :: Python
- 27. 使用boost :: python
- 28. 如何在VS2017中使用Boost Python库进行构建
- 29. Boost版本编号
- 30. Android Studio构建版本的旧版本
编译boost for python 2.7.9 **应该**适用于所有版本的python早在2.5。虽然,它不会为python 3工作。 – randomusername 2015-03-05 21:33:16