ios - ranlib 缺少在 iOS 上编译 GNU bash

标签 ios makefile arm binutils darwin

我正在尝试使用 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 选项添加到 make

这可能行不通,因此有一个大 hack 可能会奏效。 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/

相关文章:

ios - 在 TabViewController 中创建 UIScrollView

ios - 从路径获取文件内容

ios - 音频在后台播放但没有声音 Cordova 3+ IOS

c - C- undefined reference

适用于 ARM 的安卓开发工具包

ios - 适用于 iOS 的 AWSS3TransferUtility 无法正常工作(虽然 AWSS3TransferManager 可以)

makefile - makefile 中处理组件的顺序

bash - makefile 中的多行 bash 命令

linux - 如何将内核调试信息构建为单独的文件?

c - 内部引导加载程序 ARM cortex M4 NRF52 芯片