1

我目前正在使用一个需要构建 i686 和 x86_64 库,在同一系统上构建和安装它们的系统 - 这是一个遗留项目,它混合了通常以 64 位运行的较新的 ABI 不可知代码,因为它可以使用额外的内存,以及一些在为 64 构建时会中断的旧代码。

对于 99% 的链接库,这可以正常工作;在 autoconf、rpm-build 和 pkg_config 之间,它可以毫无问题地找到正确的库。不幸的是,有一个主要的例外——MySQL。他们没有提供 pkg_config 脚本,而是拥有自己的自定义 mysql_config 脚本,并且它不尊重目标 ABI - 它只报告最后安装的值。

因此,虽然我们得到了移植到 64 位上正常运行的最后一个代码,但我试图通过编辑 Autoconf MySQL 配置脚本(官方 GNU 脚本,ax_lib_mysql.m4)来后处理报告的 CFLAGS 和LDFLAGS 取决于目标平台。这就是问题的症结所在——Autoconf M4 中是否有一种很好的方法来检测您是在为 32 位还是 64 位目标构建?确切的 ABI 无关紧要——主要是知道我是否需要链接到 /usr/lib 或 /usr/lib64。

很抱歉为一个句子的问题写小说,但我在网上找到了很多地方,人们问如何做到这一点,但从未得到答案,因为每个人都忙着告诉他们他们不应该这样做,因为它会使构建过程更加脆弱,所以我试图设置一点。我知道这是一个可怕的 hack(非常欢迎使用替代方法!),但我需要一些方法来解决这个问题,以在过渡期间保持系统构建。

4

1 回答 1

2

如果您在配置脚本中添加AC_CANONICAL_HOST ,我认为您想要使用其中一个$host_cpu$build_cpu设置哪个设置。

请参阅 autoconf 信息文档中的获取规范系统类型

于 2015-07-07T16:18:30.510 回答