我设法为 iPhone 设备和 iPhoneSimulator 正确构建。
尽管 Xcode5.0.1 不支持命令行的 llvm,但您可以下载“Maverick 命令行工具”。如果你安装它,那么你可以使用 llvm。因此,您可以为“iPhone”和“iPhoneSimulator”使用构建配置(无需使用“iPhone-clang-libc++”和“iPhone-clang-libc++”配置)
并且“nm”工具正确显示了问题。当我为 iPhoneSimulator 构建时出现了问题。
因此,我将向您展示这些问题的快速解决方案。
1)转到您下载的“poco-1.4.6p2-all”目录
2) 打开构建/配置/iPhone 文件
vim build/config/iPhone
3)和更改以下两行
CC = $(shell ls $(TOOL_PREFIX)/llvm-gcc-$(GCC_VER)* | tail -1)
CXX = $(shell ls $(TOOL_PREFIX)/llvm-g++-$(GCC_VER)* | tail -1)
对此
CC = /usr/bin/llvm-gcc
CXX = /usr/bin/llvm-g++
这是因为原始脚本试图在错误的地方调用“llvm-gxx”。“Maverick 命令行工具”将为“/usr/bin”目录中的“llvm-gxx”创建符号链接。
对不起,不是漂亮的脚本,而是硬连线的脚本。
4)并找到'CXXFLAGS',并像这样指定'openssl'包含和lib目录。(当然,您需要事先构建它。)
CXXFLAGS = $(OSFLAGS) -Wall -Wno-sign-compare -L(Your openssl source directory)/lib/iOS -I(Your openssl source directory)/include
5) 现在您已经完成了该配置文件。保存并关闭。
6) 接下来,打开 build/config/iPhoneSimulator 文件
vim build/config/iPhoneSimulator
7)找到'OSFLAGS'并像这样评论它
# OSFLAGS = -arch $(POCO_TARGET_OSARCH) -isysroot $(IPHONE_SDK_BASE) -miphoneos-version-min=$(IPHONE_SDK_VERSION_MIN)
8) 完成。保存并关闭它。
9) 现在触发以下命令为“iPhone”设备构建库。
./configure --config=iPhone -static --no-tests --no-samples --omit=Data/ODBC,Data/MySQL
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv7 -s -j4
如果您需要为其他架构构建库,请添加它。
10) 完成。现在触发以下命令为“iPhoneSimulator”构建库
make clean
./configure --config=iPhoneSimulator -static --no-tests --no-samples --omit=Data/ODBC,Data/MySQL
make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=i686 -s -j4
上面的最后一行,更改为构建配置文件是我的问题的解决方案......我不太了解编译器和链接器的东西,所以我不确定原始脚本的真正问题是什么......
11) 完成。最后,像这样比较这两个的库内容。
nm lib/iPhoneOS/armv7/libPocoFoundation.a | grep digestToHex
nm lib/iPhoneSimulator/i686/libPocoFoundation.a | grep digestToHex
例如,您应该会看到已编译的 C++ 函数“digestToHex”的签名与此相同。
brucewang@Bruce-ui-MacBook ~/Downloads/poco-1.4.6p2-all $ nm lib/iPhoneOS/armv7/libPocoFoundation.a | grep digestToHex [ruby-1.9.3-p125]
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: no name list
0000001c T __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE
00000280 S __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE.eh
00000228 s __ZZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEEE6digits
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: no name list
brucewang@Bruce-ui-MacBook ~/Downloads/poco-1.4.6p2-all $ nm lib/iPhoneSimulator/i686/libPocoFoundation.a | grep digestToHex [ruby-1.9.3-p125]
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: no name list
00000050 T __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE
00000268 S __ZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEE.eh
00000218 s __ZZN4Poco12DigestEngine11digestToHexERKSt6vectorIhSaIhEEE6digits
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm: no name list
brucewang@Bruce-ui-MacBook ~/Downloads/poco-1.4.6p2-all $
12) 如果你需要'fat library'然后从你的终端调用'lipo'命令。例如,您可以为所有 *.a 文件重复触发以下命令的简单 shell 脚本。
lipo -create -output "${UNIVERSAL_DIR}/${FILE1}" "${SIMULATOR_DIR}/${FILE1}" "${ARMV7_DIR}/${FILE1}"
就这样。