【问题标题】:Compile c++ files for all iOS architectures为所有 iOS 架构编译 c++ 文件
【发布时间】:2015-08-21 08:36:22
【问题描述】:

我有一些 cpp 文件,我想编译它以便在模拟器和 iPhone 上运行。我想做的是:

g++ -c file1.cpp file2.cpp -std=c++11
ar rcs libabc.a *.o

这编译得很好,但仅适用于 x86_64 架构..显然...

有没有什么简单的方法可以编辑这两行命令,以便为所有架构(x86_64 i386 armv7 armv7s arm64)编译一个库?或者我应该构建一些巨大的脚本来拥有那个库?如果是这样的话?有没有现成的脚本?

我也尝试过使用 -arch 运行它:

g++ -c file1.cpp file2.cpp -std=c++11 -arch armv7 -arch x86_64

但这些是我遇到的一些错误

//----------------- Error 1 -------------------------//

//----------------- Error 2 -------------------------//

//----------------- Error 3 -------------------------//

谢谢!

【问题讨论】:

  • @JBL 尝试运行脚本但没有成功。 ./configure 在脚本中应该是什么意思?我必须将脚本放在哪个级别?在我的 .h 和 .cpp 文件的同一级别上?
  • 我有点误会了,这并不适合您的问题。您是否尝试将这些文件编译为库以在您的 iOS 应用中使用?
  • @JBL:是的,这就是我想要做的
  • 考虑使用clang++ 而不是g++g++ 只是一个clang 包装器。
  • 为什么不使用 XCode 将这些 cpp 文件编译到库中呢?您可以创建一个包含这些的 XCode 项目,然后使用 XCode IDE 编译您想要的架构,或者使用 xcodebuild 从命令行编译项目(有选择架构的选项)

标签: c++ compilation clang computer-architecture armv7


【解决方案1】:

您考虑过-arch 编译器标志吗?

g++ -c file1.cpp file2.cpp -std=c++11 -arch x86_64 -arch i386 -arch armv7 #...

【讨论】:

  • 是的,它给了我一些奇怪的错误,例如:/usr/include/sys/cdefs.h:680:2: error: Unsupported architecture or /usr/include/sys/_types/_ssize_t.h: 30:9:错误:未知类型名称'__darwin_ssize_t'
  • @Grace:表示SDK与-arch x86_64-arch i386不兼容(检查-v)。这个答案是正确的。
  • @Thomas 是的,它可能是正确的,但我仍然找不到让它与我一起工作的方法
【解决方案2】:

更好地单独构建每个拱门,然后将它们粘合在一起。它有助于找出不同或错误包含的平台特定标头等。

但根据我的经验,如果您可以避免通过控制台进行构建,那么这一切都是不值得的。如果适合您,请创建一个 Xcode 项目并使用假框架。或者单独构建静态库,然后自己将它们粘合在一起。

【讨论】:

  • 嗨@benjist,即使我为每个单独编译也不起作用。我已经从 Xcode 编译了库,但我需要让它也可以通过控制台工作。
  • 那么你必须为每个支持的架构找到正确的包含路径,你必须使用正确的编译器。这是你的实际问题。您使用的编译器无法为所选架构构建,并且特定于架构的包含必须引用 Xcodes 工具链中特定于架构的路径。当您还安装命令行工具时,所有这些编译器和包含都在 Xcode 中。或者你自己设置所有编译器——你真的不想做的事情。
猜你喜欢
  • 2016-10-25
  • 2013-06-05
  • 2013-01-04
  • 2014-09-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
相关资源
最近更新 更多