ranlib在iOS上缺少编译GNU bash

时间:2015-07-06 21:46:52

标签: ios makefile arm binutils darwin

我尝试使用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?

2 个答案:

答案 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

应该修复它。