Autoconf在OS X上使用错误的AR

时间:2017-11-02 11:58:00

标签: autotools autoconf ar

我正在测试OS X.我们有configure.acMakefile.am。 Autotools为平台选择了错误的ARARFLAGS。它发生在AM_PROG_AR中的({和}} Makefile.am

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

Autoconf应该使用Apple的libtool(不要混淆Autotools'libtool)和libtool的标志。 Apple的libtool正确处理胖库和交叉编译。它应该是something like

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

Apple的Porting UNIX/Linux Applications to OS X没有讨论这个话题,我找不到它搜索Autoconf文档。 Autoconf文档也缺少AC_PROG_AR(或类似)。请参阅Autoconf手册中的5.2.1 Particular Program Checks

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

$ autoconf --version
autoconf (GNU Autoconf) 2.69

$ automake --version
automake (GNU automake) 1.15.1

1 个答案:

答案 0 :(得分:3)

  

Autotools为平台选择了错误的ARARFLAGS。在AM_PROG_AR中{和} Makefile.am发生了这种情况:[...] Autoconf应该使用Apple的libtool

我了解您希望 configure选择并使用OS X libtool来创建档案,这样做可以为您提供一些优势。 POSIX ar甚至可能是适合您特定工作的不适合的工具,但我拒绝断言/usr/bin/ar是平台的错误工具 。 Apple在OS X中提供了该工具,它的工作方式与广告一致,即使广告行为比您想要或需要的更加局限。

  

应该是这样的:

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

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

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

它还将支持Microsoft lib实用程序提供的界面。这两者都与AM_PROG_AR宏相关联。

请注意,测试使用主要选项的硬编码标志,而不是可能已指定的任何$ARFLAGS。它专门测试程序的命令行界面,Mac libtool不提供可识别的界面。

您有几种选择:

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

    ./configure AR=my-mac-libtool-wrapper
    
  • 如果构建系统使用AM_PROG_AR,则默认情况下ARARFLAGS变量对configure无意义,但您可以直接将它们指定给make

    make AR=/usr/bin/libtool ARFLAGS="-static -o"
    
  • 或者,如果构建系统不使用AM_PROG_AR,那么您可以添加自己的代码,以使configure处理ARARFLAGS变量。获得configure识别它们并将它们传递给Makefile而不执行任何实际测试的最小值可能是:

    AC_ARG_VAR([AR], [Specifies the archiver to use])
    AC_ARG_VAR([ARFLAGS], [Specifies the archiver flags to use])