【发布时间】:2010-12-07 08:43:02
【问题描述】:
谁能告诉我,在哪里可以找到详细指南,如何构建 Boost-Libraries 以便在 iPhone 设备上使用它。
我已经为 Mac 构建了库并且可以在我的项目中使用它们(仅在 iPhone-Simulator 上)。在为 iPhone-Device 构建项目时,XCode 给我一个警告:“文件不是必需的架构”以及其他一些错误。
请帮忙
【问题讨论】:
标签: ios iphone xcode boost build
谁能告诉我,在哪里可以找到详细指南,如何构建 Boost-Libraries 以便在 iPhone 设备上使用它。
我已经为 Mac 构建了库并且可以在我的项目中使用它们(仅在 iPhone-Simulator 上)。在为 iPhone-Device 构建项目时,XCode 给我一个警告:“文件不是必需的架构”以及其他一些错误。
请帮忙
【问题讨论】:
标签: ios iphone xcode boost build
使用 iPhone 静态库项目模板在 Xcode 中启动一个新项目。 然后导入源和头文件,并以这种方式编译。结果应该是一个与 iPhone 兼容的静态库
【讨论】:
我从这里开始: http://lists.boost.org/boost-build/2009/02/21326.php
对于大多数 Boost,您可能不需要实际编译它,只需包含有用的标头即可。就我而言,我只是在我自己的 Xcode 项目中定义了编译器。
【讨论】:
嘿,我在我的 openFrameworks 插件中更新了 Pete Goodliffes 脚本:
【讨论】:
我们也使用 boost。为了简化将其包含到新应用程序中,我创建了一个 Xcode 项目,您可以将其放入您的工作区以包含 boost。它基于 Makefile,因此您需要安装 Xcode 命令行工具。
项目在这里https://github.com/Cogosense/iOSBoostFramework。
将项目克隆到您的工作区,然后单击菜单文件->“将文件添加到工作区”。在文件查找器中选择iOSBoostFramework/iOSBoostFramework.xcodeproj,然后点击添加。
iOSBoostFramework 目录中的 Makefile 控制构建的内容和构建方式。支持 Xcode 工作区依赖,bitcode 生成,只构建 Xcode 选择的目标架构。
以下库是构建的 test、thread、atomic、signals、filesystem、regex、program_options、system date_time、serialization、exception、locale 和 random。
所有独立的库和架构组合在一起,最终的构建输出是一个 FAT boost.framework 框架包,可以链接到应用程序中。
boost 的版本在 Makefile 中指定(当前为 1.64.0),它被下载、为所有活动架构构建并安装在 xcode 指定的 BUILT_PRODUCTS_DIR 中。
【讨论】:
对于只有头文件 (.hpp) 的 boost 库,您可以设置从项目到它们的头搜索路径。
对于带有源的 boost 库,您可以通过以下简单步骤为 ios 手机/模拟器构建静态库:
下载并解压增强版存档(来自https://www.boost.org/users/download/),例如:https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2
使用需要的库运行 bootstrap.sh 以构建例如“上下文”(格式 =library1,library2,...):
./bootstrap.sh --with-libraries=context
project-config.jamproject-config.jam:# IOS ARM64
using clang : iphoneos
: xcrun clang -arch arm64 -stdlib=libc++ -std=c++11 -miphoneos-version-min=12.0 -fvisibility-inlines-hidden -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
;
# IOS x86_64
using clang : iphonesimulator
: xcrun clang -arch x86_64 -stdlib=libc++ -std=c++11 -miphoneos-version-min=12.0 -fvisibility-inlines-hidden -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk
;
libboost_<name>.a):lib=libboost_context.a
dir='stage/lib'
# Build arm64
./b2 -a -j4 toolset=clang-iphoneos binary-format=mach-o abi=aapcs link=static stage
mv $dir/$lib $dir/arm64_$lib
# Build x86_64
./b2 -a -j4 toolset=clang-iphonesimulator binary-format=mach-o abi=sysv link=static stage
mv $dir/$lib $dir/x86_64_$lib
# Make fat
lipo -create $dir/arm64_$lib $dir/x86_64_$lib -output $dir/$lib
现在您在“/stage/lib”目录中为 boost 上下文编译了下一个静态库:arm64_libboost_context.a、x86_64_libboost_context.a 和胖一个 libboost_context.a。
【讨论】:
当我想为手臂模拟器构建提升时,上一个答案对我有所帮助。当您有一台配备 M1 处理器的 Mac 并想使用模拟器时,您不能使用适用于 iPhone 的 arm64 版本。
我将此添加到 project-config.jam:
# IOS Arm Simulator
using clang : iphonesimulatorarm64
: xcrun clang -arch arm64 -stdlib=libc++ -std=c++11 -miphoneos-version-min=10.0 -fvisibility-inlines-hidden -target arm64-apple-ios10.0-simulator -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk ;
然后将 toolset=clang-iphonesimulatorarm64 传递给 b2 命令。
【讨论】: