我尝试使用Clang,ld64,cctools,GNU make和iOS 8.1 SDK在我的iPad 2,iOS 8.4上编译GNU bash 4.3.30 <和em>(和for)。处理libintl时,cctools&#39; ar&#34;无法找到或执行:/ usr / bin / ranlib&#34;,导致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?
答案 0 :(得分:1)
ranlib为库创建索引。 可能这不是必需的,或者Apple库与POSIX库不同。
因此,根据https://developer.apple.com/library/ios/documentation/DeveloperTools/glibtool/libtool_3.html的提示,您可以尝试创建/usr/bin/ranlib
:
#!/bin/sh
ar cru $@
当然chmod +x
它。如果$ @包含诸如-q
之类的ranlib选项,则您需要修改上述内容以删除它。
要面对错误,请将<{1}}或--keep-going
选项添加到 make 。
这可能不起作用,所以相反或者另外,这是一个可能有效的大黑客。您看到的-k
中Makefile中的每个位置都替换为libintl.a
。你可能不得不放入bindtextdom.o dcgettext.o dgettext.o gettext.o finddomain.o loadmsgcat.o
等路径。
最后要做的就是构建binutils。虽然这可能有点困难。
答案 1 :(得分:0)
Cydia中的cctools
包已损坏,但幸运的是ranlib
只是libtool
的符号链接,所以
ln -s $(which libtool) /usr/bin/ranlib
应该修复它。