我正在尝试为一个非常不完整的libc的异常嵌入式系统交叉构建一个支持autotools的软件包。 (如果相关:包是CPython 3.4.2,而#34;嵌入式系统"是Android 4.4上的命令行shell。)
AFAIK,我的构建机器上运行的configure
无法确定主机上的哪些功能被破坏。 (configure
可以并且确实在构建机器上编译和链接测试程序,但它无权在主机上运行程序。)例如,wcsftime()
函数在主机的<wchar.h>
标头并在主机的libc中定义,但实现不正确。
对于此程序包configure
构建一个带有C宏config.h
的{{1}}文件,如果HAS_WCSFTIME
认为主机具有正常工作configure
,则会定义该文件。否则就是不合适的。并且包的源代码是正确的ifdefed,以便如果缺少wcsftime()
,则使用wcsftime()
代替,在7位ascii和UCS-4之间来回进行适当的转换。
我无法使用:
运行strftime()
configure
因为config.h文件无论如何都只是重新定义它。
我到目前为止提出的选项是:
CPPFLAGS=-UHAS_WCSFTIME configure --build=... --host=... ...
变量添加到configure.ac文件ac_cv_broken_host_wcsftime
宏添加ifdef
个来源HAS_BROKEN_WCSFTIME
后都记得运行patch
我已经实施了选项(4)并且......不满意。我可以做(1)或(2)并将其贡献给软件包开发人员,但是在变更合并之前几个月。我正在研究选项(3),但这需要数年才能部署到我的大多数用户的手机和平板电脑上。
解决这个问题的正确方法是什么? (我希望它会出现很多,因为我有很多不同的软件包需要工作,而且libc中有很多破损的函数。)
configure
是否有一些命令行选项可让我控制哪些CPP宏被定义和不定义?
答案 0 :(得分:2)
是否有一些命令行选项可以让我控制哪些CPP宏执行和不定义?
没有
最好的办法是与软件包维护人员交谈。他们可以帮助您将可接受的补丁放在一起。然后,您可以应用此修补程序,直到使用以下方法推送它。
作为4)的替代方案,您也可以修补configure
本身,特别是如果有一个引导脚本被调用来创建configure
。在引导脚本中执行操作以修复configure
或libtool
等等,这是我过去解决此问题的方法之一。
如果在3)你的意思是Bionic作为libc,我认为“never”可能是一个比“花费数年”更广泛的字符函数更准确的时间表。
AFAIK在我的构建计算机上运行配置无法确定主机上的哪些功能被破坏。 (configure可以并且确实在构建计算机上编译和链接测试程序,但它无权访问主机上的程序。)
大部分都是如此。 Scratchbox2允许您在主机上进行运行时configure
测试,但不幸的是,它不支持Android。