使用iconv为iOS构建Boost.Locale

时间:2015-10-29 11:30:02

标签: c++ ios boost boost-locale b2

我目前正在尝试为iOS构建Boost.Locale,但我无法找到iconv lib(我正在成功构建Boost for iOS的其他部分,例如thread或{ {1}})。

我试图让Boost.Build自己找到它,我试图将filesystem变量设置为指向iPhoneOS SDK iconv lib。检查Boost.Locale中的Jamfile,我偶然发现了这条规则:

ICONV_PATH

所以我认为将-sICONV_PATH设置为lib iconv : : <search>$(ICONV_PATH)/lib <link>shared <runtime-link>shared : : <include>$(ICONV_PATH)/include ; 就足够了,因为这个目录包含一个/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr和一个lib文件夹,其中包含iconv lib和header,但是Boost仍然没有找到它,吐了:

include

请注意,我始终使用iconv (libc) : no iconv (separate) : no icu : no icu (lib64) : no Boost.Locale needs either iconv or ICU library to be built. 选项调用b2,因此它不是上一次调用的缓存结果(在上面的列表中会有一个尾随--reconfigure

那么,有没有办法正确地将Boost指向iOS SDK中的iconv实现?如果可能的话,我想避免建立一个单独的iconv。

3 个答案:

答案 0 :(得分:4)

我遇到了类似的问题。经过一些挖掘和一些红色鲱鱼,我了解到通过编译has_iconv.cpp程序,boost检测到了iconv。在我的情况下(使用很多人似乎用于编译iOS的boost.sh脚本)在config.log中有很多编译错误,这是由user-config.jam中的错误using语法引起的。所以问题 - 至少对我而言 - 没有设置ICONV_PATH,而是让检测程序完全编译!也许你有类似的问题。

如果你有兴趣我做了full write up of finding in my blog

答案 1 :(得分:2)

构建

时,您应该收到以下日志输出
  

如果在Darwin / Mac OS X版本中找不到iconv库,请确保   没有多个iconv安装并提供-sICONV_PATH   构建选项以指向iconv库的正确位置。

首先你需要引导位置,其中$ ICU = ICU根目录构建ICU构建产品的目录(&#34; bin /&#34;,&# 34;包括/&#34;等等):

.\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++"

答案 2 :(得分:1)

迟到的答案,但这是一个使用iconv库(boost v1_64_0)在iOS上支持Boost.Locale的工作配置。 https://github.com/Cogosense/iOSBoostFramework提供了一个实现,它使用Makefile为armv7,armv7s,arm64,i386和x86_64架构构建一个boost框架。

要构建32位ARM,请使用以下内容创建 user-config.jam

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_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,请使用以下内容创建 user-config.jam

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_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模拟器,请使用以下内容创建 user-config.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_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模拟器,请使用以下内容创建 user-config.jam

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_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