使用iOS版的iconv构建Boost.Locare
Build Boost.Locale with iconv for iOS
我目前正在尝试为iOS构建Boost.Locae,但我找不到iconv库(我正在为iOS成功构建Boost的其他部分,如thread
或filesystem
)。
我试着让Boost.Build自己找到它,我试着将ICONV_PATH
变量设置为指向iPhoneOSDK图标库。在Boost.Locare中检查Jamfile,我偶然发现了这个规则:
lib iconv
:
: <search>$(ICONV_PATH)/lib <link>shared <runtime-link>shared
:
: <include>$(ICONV_PATH)/include
;
因此,我认为将-sICONV_PATH
设置为/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr
就足够了,因为该目录包含一个lib
和一个包含iconv-lib和标头的include
文件夹,但Boost仍然找不到它,并吐出:
iconv (libc) : no
iconv (separate) : no
icu : no
icu (lib64) : no
Boost.Locale needs either iconv or ICU library to be built.
注意,我总是用--reconfigure
选项调用b2
,因此这不是前一次调用的缓存结果(在上面的列表中会有一个尾随的(cached)
。
那么,有没有一种方法可以正确地将Boost指向iOS SDK中的iconv实现?如果可能的话,我想避免建立一个单独的图标。
我也遇到过类似的问题。经过一番挖掘和研究,我了解到boost通过编译has_iconv.cpp程序来检测iconv。在我的案例中(使用很多人似乎用来为iOS编译的boost.sh脚本),config.log中有很多编译错误是由user-config.jam中的错误使用语法引起的。所以问题——至少对我来说——不是设置了ICONV_PATH,而是让检测程序编译!也许你也有类似的问题。
如果你感兴趣的话,我在博客上写了一篇完整的文章。
构建时,您应该收到以下日志输出
如果在Darwin/Mac OS X构建中找不到iconv库,请确保没有多个iconv安装,并提供-sICONV_PATHbuild选项指向iconv库的正确位置。
首先,您需要引导位置,其中$ICU=ICU根目录和构建ICU构建产品所在的目录("bin/"、"include/"等):
.bootstrap --with-icu=$ICU
然后
.b2 boost.locale.icu=on boost.locale.std=off -sICU_PATH="$ICU" --with-chrono --with-locale --with-system --with-thread link=static stage cxxflags="-miphoneos-version-min=9.0 -stdlib=libc++"
答案很晚,但这里有一个使用iconv库(Boost v1_64_0)在iOS上支持Boost.Locare的工作配置。实现可从https://github.com/Cogosense/iOSBoostFramework它使用Makefile为armv7、armv7s、arm64、i386和x8_64体系结构构建一个boost框架。
要构建32位ARM,请创建一个用户配置果酱,内容如下:
using clang-darwin : arm
: xcrun --sdk iphoneos clang++
: <cxxflags>"-miphoneos-version-min=8.0 -arch armv7s -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11 -D_LITTLE_ENDIAN -Wall -pedantic -Wno-unused-variable"
<linkflags>"-arch armv7s"
<striper>
;
架构也可以设置为armv7,根据您的喜好更改cxxflags的值,但需要-arch标志。
使用以下构建命令为32位iPhone目标构建boost:
BOOST_BUILD_USER_CONFIG=<path-to-arm32-jam-config>/user-config.jam
SDK_PATH=$(xcrun --sdk iphoneos --show-sdk-platform-path)
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneOS.sdk/usr
toolset=clang-darwin-arm
target-os=iphone
要构建64位ARM,请创建包含以下内容的用户配置果酱:
using clang-darwin : arm64
: xcrun --sdk iphoneos clang++
: <cxxflags>"-miphoneos-version-min=8.0 -arch arm64 -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11 -D_LITTLE_ENDIAN -Wall -pedantic -Wno-unused-variable"
<linkflags>"-arch arm64"
<striper>
;
使用以下构建命令为64位iPhone目标构建boost:
BOOST_BUILD_USER_CONFIG=<path-to-arm64-jam-config>/user-config.jam
SDK_PATH=$(xcrun --sdk iphoneos --show-sdk-platform-path)
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneOS.sdk/usr
toolset=clang-darwin-arm64
target-os=iphone
要构建32位x86模拟器,请创建一个用户配置jam,内容如下:
using clang-darwin : x86
: xcrun --sdk iphonesimulator clang++
: <cxxflags>"-miphoneos-version-min=8.0 -arch i386 -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11 -Wall -pedantic -Wno-unused-variable"
<linkflags>"-arch i386"
<striper>
;
使用以下构建命令为32位iPhone模拟器构建boost:
BOOST_BUILD_USER_CONFIG=<path-to-x86-jam-config>/user-config.jam
SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-platform-path)
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneSimulator.sdk/usr
toolset=clang-darwin-i386
target-os=iphone
要构建64位x86模拟器,请创建一个用户配置果酱,内容如下:
using clang-darwin : x86_64
: xcrun --sdk iphonesimulator clang++
: <cxxflags>"-miphoneos-version-min=8.0 -arch x86_64 -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11 -Wall -pedantic -Wno-unused-variable"
<linkflags>"-arch x86_64"
<striper>
;
使用以下构建命令为64位iPhone模拟器构建boost:
BOOST_BUILD_USER_CONFIG=<path-to-x86_64-jam-config>/user-config.jam
SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-platform-path)
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneSimulator.sdk/usr
toolset=clang-darwin-x86_64
target-os=iphone
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在boost beast http请求中设置http头
- Boost Spirit,获取迭代器内部语义动作
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 使用Boost Interprocess创建托管共享内存需要很长时间
- Boost::posix_time::ptime舍入到给定的分钟数
- 使用iOS版的iconv构建Boost.Locare