【问题标题】:How to cross-compile clang/llvm for iOS?如何为 iOS 交叉编译 clang/llvm?
【发布时间】:2014-07-19 18:09:08
【问题描述】:

如何为 iOS 交叉编译 clang/llvm?我需要获取 libclang(我相信是 .a 或 .dylib)才能通过我的 iOS 应用程序中的 C API 使用它。

【问题讨论】:

  • C0deh4cker 在 Cydia 中已经构建了一个完整的 LLVM 工具链(包括 libllvm 和 libclang)。您可以使用浏览器或 wget/curl 从他的存储库下载包,然后将 .a 库添加到您的项目中。您不能在未越狱的设备上使用.dylibs(不过,如果您越狱了,您可以使用它们。)
  • 谢谢,我问的原因是 llvm 3.1 在他的 repo 中可用,而 3.4 是最新的。我相信在 3.1 和 3.4 版本之间的一年里做了很多事情
  • 为什么这被否决了?

标签: ios clang llvm cross-compiling


【解决方案1】:
# Get LLVM/Clang

mkdir llvm
curl -O http://llvm.org/releases/3.4/llvm-3.4.src.tar.gz
tar xzfv llvm-3.4.src.tar.gz
cd llvm-3.4/tools/
curl -O http://llvm.org/releases/3.4/clang-3.4.src.tar.gz
tar xzfv clang-3.4.src.tar.gz
mv clang-3.4 clang
cd ..

# Assuming Xcode 5.1 (LLVM 3.5+ requires -stdlib=libc++ as well)

export CC="clang -arch armv7 -mios-version-min=5.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk"
export CXX="clang++ -arch armv7 -mios-version-min=5.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk"

mkdir build
cd build

../configure \
  --prefix=/Users/thomas/tmp/llvm-ios \
  --host=arm-apple-darwin11 \
  --enable-optimized \
  --disable-assertions

unset CC CXX # important! (Otherwise the next step will fail)

make VERBOSE=1 -j...

一段时间后你会得到:

/Users/thomas/tmp/llvm-3.4/lib/Support/Unix/Program.inc:46:10: fatal error: 'crt_externs.h' file not found
#include <crt_externs.h> // _NSGetEnviron
         ^

注释头文件并破解对_NSGetEnviron()的调用(你会得到这个3次)

make install

【讨论】:

  • 我收到了你写的一个错误。 _NSGetEnviron() 是什么?我用谷歌搜索了一下,但我没有在文档中找到它。可以为它返回 nil 吗?
  • 是的,用 NULL 替换它们应该是“安全的”。 _NSGetEnviron() 在 iOS 上是不允许的(否则 Apple 会拒绝你的应用程序:google.com/#q=_NSGetEnviron()+ios+rejected
  • 非常感谢!是否有任何其他调用可以阻止应用通过 AppStore 分发?
  • 对不起,我不知道,只有苹果可以告诉你。我不知道 Clang 是否调用了任何其他私有 iOS API 调用。
  • @user10000100_u:试试--disable-libedit--enable-libedit=no
【解决方案2】:

iOSToolChain 在 Cydia 中的 https://coolstar.org/publicrepo/ 中。

iOS 上的 Clang 和 LLVM。

我在越狱设备上使用它为 iOS(ARM 32 位或 ARM 64 位)编译 C 应用程序。

这里有一个很好的参考帖子:Compile IOS program from linux commandline

【讨论】:

    猜你喜欢
    • 2020-08-29
    • 2015-12-24
    • 2014-03-10
    • 2014-01-10
    • 2020-01-19
    • 2020-10-05
    • 1970-01-01
    • 2012-02-27
    • 2019-12-11
    相关资源
    最近更新 更多