我在我的計算機上使用多個版本的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