我目前正在尝试为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。
答案 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