【发布时间】:2014-09-04 07:12:34
【问题描述】:
我想按照 WWDC 2014 会议 305 视频和 OpenSSL 网站中的说明在未安装 gcc 的情况下在 OS X 上交叉编译适用于 iOS 的 OpenSSL 1.0.1h。
按照here 的建议,我解压缩/解压缩并从gcc 切换到clang(几乎)。
OLD_LANG=$LANG
unset LANG
sed -i "" 's|\"iphoneos-cross\"\,\"llvm-gcc\:-O3|\"iphoneos-cross\"\,\"clang\:-Os|g' Configure
sed -i "" 's/CC= cc/CC= clang/g' Makefile.org
sed -i "" 's/CFLAG= -O/CFLAG= -Os/g' Makefile.org
export LANG=$OLD_LANG
请注意,我必须坚持使用makedepend 工具,否则make depend 步骤将失败(也提到了elsewhere)。使用brew install makedepend 安装该工具对我来说不是问题(但在 Clang 旁边安装 gcc 会是问题)。现在
./Configure iphoneos-cross
make depend
make
导致警告(在make depend 期间)和错误(在make 期间)关于缺少包含文件(例如stdlib.h)。传递给clang 的典型包含路径显然是-I. -I.. -I../include。
我假设这是 related 到 clang 默认情况下不接收特定的 C 选项,但如果是这样,使编译工作的最明智的方法是什么?通过修复sed 编辑或设置环境变量。 (目前我没有设置任何CC* 环境变量。我的系统上有例如/usr/include/stdlib.h。)
我很少在命令行上使用 OS X C 编译器,因此解决方案对我来说并不明显。
更新这是一个更具体的问题,对于谁的有效答案将获得奖励:必须在最新版本的 OpenSSL 源代码(例如 openssl-1.0.1h.tar.gz)中的文件,以便可以通过在带有 Xcode 5.1 的 OS X 10.9 上针对 iOS 7(即将推出 iOS 8)架构发出类似于上面第二个代码 sn-p 的命令来交叉编译它.1(很快 Xcode 6)已安装,未安装 gcc 并且可选安装 makedepend?
【问题讨论】:
-
你在命令行看到了什么输出? “xcrun gcc”
-
@quellish 我得到
clang: error: no input files。所以gcc显然是以Clang的形式存在的。所以我的意思是它没有被安装是我没有尝试(重新)安装它与 MacPorts,Homebrew,...... -
如果你安装了 Xcode,你不应该安装任何东西。 'gcc' 是 clang 的别名,它将接受 gcc 的选项。这是替代品的下降。如果命令行中的“gcc”对您不起作用,请使用“xcrun gcc”调用它。在小牛队应该。除此之外,您只需更改 CFLAGS 和 LDFLAGS 即可进行所需的交叉编译。
-
+1 @quellish 您能否提出使交叉编译工作的具体值(赏金是您的……)? Here 是 OpenSSL 下载链接。例如。
export CFLAGS=-I/usr/include; make和make CGLAGS=-I/usr/include都会导致(尽管不同)错误。关于目录/SDKs/似乎也存在(可能是后续)问题,我的Mac 上缺少该问题。 (不过,我确实在 Mavericks 上安装了 Xcode 5.1.1——甚至是 Xcode 6.0。)