我正嘗試爲一個非常不完整的libc爲一個不常見的嵌入式系統交叉構建一個啓用autotools的軟件包。 (如果是相關的:軟件包是CPython 3.4.2,而「嵌入式系統」是Android 4.4上的命令行shell)。如何告訴autoconf有關斷開的交叉HOST功能?
AFAIK沒有辦法在構建機器上運行configure
可以確定哪些函數主機壞了。 (configure
可以編譯並鏈接編譯機器上的測試程序,但它無法在主機上運行該程序。)因此,例如,wcsftime()
函數在主機的<wchar.h>
標題中聲明,並在主機的libc,但實現不正確。
對於此軟件包configure
建立一個config.h
文件與C宏HAS_WCSFTIME
,其被定義如果configure
認爲主機具有一個工作wcsftime()
並且否則undef'd。如果缺少wcsftime()
,則使用strftime()
,而在7位ascii和UCS-4之間來回轉換時,包的源代碼是正確的。
我不能只是運行configure
有:
CPPFLAGS=-UHAS_WCSFTIME configure --build=... --host=... ...
因爲在config.h文件只是重新定義了也無妨。
我想出迄今的選項有:
- 一個
ac_cv_broken_host_wcsftime
變量添加到configure.ac文件 - 添加
ifdef
S代表宏HAS_BROKEN_WCSFTIME
該人士透露 - 修復主機的libc
- 爲config.h創建一個補丁,將HAS_WCSFTIME從定義翻轉爲undefined,並記得在我運行後每次運行
patch
configure
我已經實現了選項(4),這是...令人不滿意的。我可以做(1)或(2)並將其提供給軟件包開發人員,但是這些修改需要幾個月才能完成。我正在處理選項(3),但這需要幾年才能部署到我的用戶的大部分手機和平板電腦上。
什麼是解決這個問題的正確方法? (由於我有很多不同的包,我希望它能工作,並且在libc中有幾十個中斷函數,所以我期望它會出現很多。)
是否有一些命令行選項可用於configure
會讓我控制哪些CPP宏會執行並且不會被定義?
您好! A)您是使用Google NDK還是使用CrystaX NDK? B)爲什麼你想在Android上運行CPython?乾杯! – unforgettableid 2015-06-22 15:25:59
@unforgettableid(a)Google NDK。我以前沒有聽說過CrystaX。 (b)我試圖讓iPython和numpy/scipy棧工作,這樣我可以在我的平板電腦上創建一個交互式數學環境。受(現已停止使用)http://computableapp.com/ for iPad的啓發。對於Android上的許多簡單的Python應用程序,Jython比CPython更有意義,但Jython不足以支持CPython的C API,並且大量的numpy/scipy被寫入CPython C API。 – 2015-06-22 19:38:38
使用CrystaX NDK無需花費時間。 (儘管我承認時間是世界上最珍貴的商品。)CPython是否可以使用NDK編譯好? – unforgettableid 2015-06-22 20:45:00