Autoconf 在 OS X 上使用错误的 AR

2024-02-02

我正在 OS X 上测试。我们有一个configure.ac and Makefile.am。 Autotools 选择错误AR and ARFLAGS对于平台。它发生在(和没有)AM_PROG_AR in Makefile.am:

$ egrep 'AR =|ARFLAGS =' Makefile
AMTAR = $${TAR-tar}
AR = ar
ac_ct_AR = ar

Autoconf 应该使用苹果的libtool(不要混淆 Autotools'libtool) and libtool的旗帜。苹果libtool正确处理胖库和交叉编译。它应该是就像是 https://github.com/weidai11/cryptopp/blob/master/GNUmakefile#L467:

AR = /usr/bin/libtool
ARFLAGS = -static -o

Apple's 将 UNIX/Linux 应用程序移植到 OS X https://developer.apple.com/library/content/documentation/Porting/Conceptual/PortingUnix/compiling/compiling.html没有讨论这个主题,我在 Autoconf 文档中搜索也找不到它。 Autoconf 文档还缺少AC_PROG_AR(或类似)。看5.2.1 特定程序检查 https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Particular-Programs.html在 Autoconf 手册中。

我们如何告诉 Autoconf 使用 Apple 平台构建工具,而不是 Linux 构建工具?


$ autoconf --version
autoconf (GNU Autoconf) 2.69

$ automake --version
automake (GNU automake) 1.15.1

Autotools 选择错误AR and ARFLAGS对于平台。它发生在(和没有)AM_PROG_AR in Makefile.am: [...] Autoconf 应该使用 Apple 的libtool

我明白你 configure选择并使用 OS Xlibtool创建档案,这样做会给你带来一些优势。 POSIXar甚至可能是不适合您特定工作的工具,但我拒绝这样的说法:/usr/bin/ar是错误的工具对于平台。 Apple 在 OS X 中提供了该工具,并且它按照广告中的方式工作,即使广告中的行为比您想要或需要的更受限制。

它应该是这样的:

AR = /usr/bin/libtool
ARFLAGS = -static -o

或许。虽然麦克libtool可以执行与以下相同的功能ar,它不是直接替代品。就是这样configure当您在命令行上指定这些变量时会抱怨(但仅当您还具有AM_PROG_AR)。特别是,如果您检查configure您可能会发现它测试脚本指定的工具的行为AR使用如下命令:

$AR cru libconftest.a conftest.$ac_objext >&5

它还将有一个由微软提供的界面的后备lib公用事业。这两者都与AM_PROG_AR macro.

请注意,测试对主要选项使用硬编码标志,而不是任何$ARFLAGS这可能已被指定。它专门测试程序的命令行界面,以及Maclibtool不提供一个被认可的。

您有多种选择:

  • 让构建系统继续使用AM_PROG_AR,并提供Mac的包装脚本libtool模仿 POSIX 的传统命令行界面ar。针对 Mac 进行配置时,将包装器脚本指定为configure作为变量的值AR.

    ./configure AR=my-mac-libtool-wrapper
    
  • 如果构建系统does not use AM_PROG_AR那么默认情况下AR and ARFLAGS变量将毫无意义configure,但您可以直接指定它们make:

    make AR=/usr/bin/libtool ARFLAGS="-static -o"
    
  • 或者,如果构建系统不使用AM_PROG_AR然后你可以添加你自己的代码来制作configure处理AR and ARFLAGS变量。最少能得到configure识别它们并将它们传递到 Makefile 而不执行任何实际测试可能是:

    AC_ARG_VAR([AR], [Specifies the archiver to use])
    AC_ARG_VAR([ARFLAGS], [Specifies the archiver flags to use])
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Autoconf 在 OS X 上使用错误的 AR 的相关文章

随机推荐