我正尝试为一个非常不完整的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