为所有iOS架构编译c++文件

7

我有一些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 -------------------------//

enter image description here

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

enter image description here

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

这里输入图片描述

谢谢!


@JBL 尝试运行脚本但没有成功。脚本中的 ./configure 应该是什么意思?我应该把脚本放在哪个级别?与我的 .h 和 .cpp 文件放在同一级别吗? - Grace
我有点误解了,这并不适合你的问题。你是想将这些文件编译为库以在你的iOS应用程序中使用吗? - JBL
@JBL:是的,这就是我正在尝试做的。 - Grace
考虑使用 clang++ 而不是 g++,因为 g++ 只是一个 clang 包装器。 - Thomas
为什么不使用XCode将这些cpp文件编译成库?您可以创建一个包含它们的XCode项目,然后通过XCode IDE编译所需的架构,或者使用xcodebuild从命令行编译该项目(有选择架构的选项)。 - VB_overflow
2个回答

4
你考虑过使用-arch编译器标志吗?
g++ -c file1.cpp file2.cpp -std=c++11 -arch x86_64 -arch i386 -arch armv7 #...

是的,它给我一些奇怪的错误,比如:/usr/include/sys/cdefs.h:680:2: 错误:不支持的架构或/usr/include/sys/_types/_ssize_t.h:30:9: 错误:未知类型名称'__darwin_ssize_t'。 - Grace
1
@Grace:这意味着SDK与“-arch x86_64”或“-arch i386”不兼容(使用“-v”进行检查)。这个答案是正确的。 - Thomas
1
@Thomas 是的,这可能是正确的,但我仍然找不到让它与我一起工作的方法。 - Grace

0

更好的方法是为每个架构单独构建,然后将它们粘合在一起。这有助于找出不同或错误包含的特定平台头文件等问题。

但从我的经验来看,如果可以避免通过控制台构建,则所有这些都不值得。如果适合您,请创建一个Xcode项目并使用虚拟框架。或者单独构建静态库,然后自己将它们粘合在一起。


嗨@benjist,即使我为每个单独编译,也不起作用。我已经从Xcode编译了库,但我需要通过控制台使其工作。 - Grace
那么,您必须调整并找到每个支持的架构的正确包含路径,并且必须使用正确的编译器。这就是您实际面临的问题。您使用的编译器无法为所选架构构建,而特定于架构的包含文件必须引用 Xcode 工具链内部的特定于架构的路径。所有这些编译器和包含文件都在安装命令行工具时包含在 Xcode 中。或者您自己设置所有编译器-但这不是您想要做的事情。 - benjist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接