我想用distutils編譯一個使用Enthought Canopy的python版本的cython模塊;然而很明顯gcc和clang之間有混淆。 Distutils試圖使用gcc
和叮噹選項-arch x86_64
來編譯模塊。問題是我從macports安裝了gcc,所以gcc不只是一個叮噹的鏈接。我可以使用CC='clang' ./setup.py build_ext
來編譯模塊,但在分配模塊方面感覺有點不方便。有沒有什麼我可以放在setup.py中,使它更穩健的這種設置?如果-arch在編譯器標誌中,我正在思考使用clang的一些方法,但我似乎無法找到distutils獲取編譯器標誌的地方,或者如何告訴它使用特定的編譯器。當gcc在OSX的PATH上編譯cython模塊
回答
Distutils正在嘗試使用gcc和clang選項-arch x86_64來編譯模塊。
這不是一個鏗鏘的選擇;在clang存在之前,它已經在gcc多年了。
問題是我已經從macports安裝gcc,所以gcc不只是一個叮噹的鏈接。
gcc
是從未只是一個鏈接到clang
,除非你真的做了你的Mac上一些奇怪的。特別是,如果您已安裝必需的Xcode命令行工具以包含MacPorts,則您將擁有/usr/bin/gcc
,這是指向gcc-4.2
或llvm-gcc-4.2
(或gcc-4.0
或更早版本)的鏈接。不久後的一天,蘋果將下降支持llvm-gcc
,又會有什麼叫gcc
可言。**
我可以得到模塊使用CC =「鐺」 ./setup.py build_ext編譯,但這種感覺有點哈克在分發模塊
模塊顯然希望建立與gcc
,它指的蘋果在/ usr/bin中/海灣合作委員會的條款。
依賴於gcc
是任何特定的編譯器幾乎總是一個壞主意,如MacPorts documentation解釋。
但是,在這種情況下,Python這樣做是有道理的。 Python會記住編譯器用於構建它,以及相同的編譯器設置等等,所以可以確定distutils將構建它實際可以使用的模塊。所以,如果它是用/ usr/bin/gcc構建的,那麼它將嘗試用來構建模塊。您可以運行工具(您的每個Python安裝都將擁有自己的工具,因此請確保您運行的是正確的工具)以準確查看它的需求。
用蘋果的叮噹代替蘋果公司的gcc-4.2,你幾乎總能逃脫。但是用一些其他的甚至不支持相同選項的隨機編譯器代替?這是行不通的。
如果你想建立的MacPorts Python模塊,你幾乎可以肯定要構建Python本身的MacPorts,無法使用一些預編譯的二進制安裝包。最重要的是,您可能希望將端口用於任何具有它們的Python模塊,而不是手動構建它們,因爲它們中的很多都需要解決方法才能使用MacPorts。
在另一方面,如果你計劃建立非MacPorts的軟件Python模塊或以其他方式 - 你真的更好不把MacPorts的gcc
作爲對PATH頂事。幾乎每個配置/ setup.py /等。永遠寫的會檢測到你在Mac上,期望gcc
成爲Apple gcc
,並通過-arch
標誌等等。 (事實上,你會注意到甚至很多端口都明確要求使用apple-gcc-4.2,llvm-gcc-4.2或clang,因爲即使MacPorts團隊也無法讓他們使用不同的編譯器。你確定你想要嗎?試試嗎?)
* ......這將是,比方說,../llvm-gcc-4.2/bin/llvm-gcc-4.2
一個鏈接,這將自身周圍i686-apple-darwin11-llvm-gcc-4.2
的鏈接或存根包裝...但是這並不重要。
**或者至少在Xcode 5.0測試版中是這樣。
- 1. 嘗試編譯模塊Linux上用gcc
- 2. 編譯模塊LUA用gcc
- 3. 如何在Windows平臺上製作pydev/eclipse編譯cython模塊
- 4. 如何在Windows上爲多個平臺編譯cython模塊?
- 5. 交叉編譯模塊與arm-eabi-gcc
- 6. 畫布模塊編譯osx錯誤
- 7. gcc要求在OSX上編譯。奇怪的錯誤消息
- 8. Cython編譯模塊在單獨的目錄中
- 9. SDL2_mixer框架OSX gcc編譯器錯誤
- 10. 在osx上使用gcc編譯allegro5程序時出錯
- 11. 在OSX上編譯libnoise 10.6
- 12. 在OSX上編譯Z3
- 13. 在Mac上編譯Cython時出錯10.6
- 14. Cython無法在Windows 7 x64上編譯
- 15. 不能編譯C++的 「HelloWorld」 用gcc編譯器在Windows上的代碼塊
- 16. Cython編譯錯誤:動態模塊沒有定義模塊導出功能
- 17. Cython和gcc:無法運行編譯的程序
- 18. Cython編譯錯誤
- 19. 在OSX上使用g ++ - 5的Cython
- 20. 如何編輯OSX PATH?
- 21. 在IntelliJ上編譯GWT模塊
- 22. PHP模塊 - 在Windows上編譯
- 23. 在Windows上編譯NodeJS C++模塊?
- 24. 在Chromebook上編譯內核模塊
- 25. 在已編譯模塊上運行GWTTestCase
- 26. 用gcc編譯的C++中的python模塊的導入4.4.3
- 27. 在Ubuntu上編譯darwin的步驟gcc
- 28. 在Linux上的GCC編譯錯誤
- 29. 在OSX上的Eclipse C++無法編譯
- 30. OSX編譯openalpr上化妝