我正在尝试使用Clang,ld64,cctools,GNU make和iOS 8.1 SDK在(以及针对)我的iPad 2,iOS 8.4上编译GNU bash 4.3.30。在处理libintl时,cctools的ar“无法找到或执行:/ usr / bin / ranlib”,导致make退出并出现错误1。

$ make
(...)
rm -f libintl.a
ar cr libintl.a bindtextdom.o dcgettext.o dgettext.o gettext.o finddomain.o loadmsgcat.o localealias.o textdomain.o l10flist.o explodename.o dcigettext.o dcngettext.o dngettext.o ngettext.o plural.o plural-exp.o localcharset.o relocatable.o localename.o log.o osdep.o intl-compat.o
fatal error: ar: can't find or exec: /usr/bin/ranlib (No such file or directory)
ar: internal ranlib command failed
make[1]: *** [libintl.a] Error 1
make[1]: Leaving directory '/private/var/mobile/bash-4.3.30/lib/intl'
make: *** [lib/intl/libintl.a] Error 1

$ echo $CC
clang --sysroot /var/mobile/iPhoneOS8.1.sdk -v
$ clang --version
clang version 3.5.0 (trunk)
Target: armv7-apple-darwin-14.0.0
Thread model: posix
$ ld -v
@(#)PROGRAM:ld  PROJECT:ld64-
configured to support archs: i386 x86_64 armv4t armv5 armv6 armv7 armv7f armv7k armv8 arm64 arm64v8
$ which ranlib
$ ranlib
-sh: ranlib: command not found
$ find / -name ranlib
$


显然,我的iPad没有ranlib。那么,我在哪里可以找到一个?我已经尝试了GNU binutils的ranlib.sh脚本,该脚本只执行ar s "$1",但是make告诉我ar: no archive specified。还是没有任何方法可以编译GNU bash 4.3.30?

最佳答案

ranlib为库创建索引。可能不需要这样做,或者Apple库与POSIX库不同。

因此,按照https://developer.apple.com/library/ios/documentation/DeveloperTools/glibtool/libtool_3.html的提示,您可以尝试这样创建/usr/bin/ranlib

#!/bin/sh
ar cru $@


当然chmod +x它。如果$ @包含ranlib选项(例如-q),则需要修改上述内容以将其删除。

要继续面对错误,请添加--keep-going-k选项。

那可能行不通,所以作为替代或补充,这可能会起作用。您在Makefile中看到的每个地方libintl.a,用bindtextdom.o dcgettext.o dgettext.o gettext.o finddomain.o loadmsgcat.o代替。并且您可能必须放入诸如/private/var/mobile/bash-4.3.30/lib/intl/bindtextdom.o等的路径。

最后要做的只是构建binutils。不过,这可能有点困难。

关于ios - ranlib缺少在iOS上编译GNU bash,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31256217/

10-10 19:43