一、POCO C++ library简介
POCO C++ library是一个C++编写的跨平台库,主要实现网络连接、数据库管理以及服务器,适用于跨平台、嵌入式。
二、为Xcode编译POCO C++ 静态库
1、确定需要编译的版本
要想使POCO C++在iOS的各个平台上运行,那么需要针对各个平台的不同架构进行编译,因此我们需要了解iOS各个平台的架构,主要分为iPhone模拟器、iPhone真机以及运行Xcode电脑本身的架构。
(1)iPhone模拟器
*iPhone5及以下版本的模拟器的架构是i386;
*iPhone5s及以下版本的模拟器的架构是x86_64;
(2)iPhone真机的架构:armv7,armv7s和arm64;
(3)OSX的架构:x86_64;
根据需要选择要支持的架构:
iOS 架构:armv7,armv7s,arm64、i386,x86_64。
OSX 架构:电脑x86_64。
2、编译器选择
一般来说,在POCO的配置的编译脚本中都不需要我们手动配置编译器,脚本命令会自己找到对应的编译器。例如poco/build/config/iPhone中
CC = $(shell xcrun -find clang)
CXX = $(shell xcrun -find clang++)
这个代码就能找到Xcode自带的C语言clang编译器、C++clang++编译器。
查看clang/clang++ 的路径的命令:所以这里不需要修改
lxx-Mac-mini:~ suning$ xcrun -find clang
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
lxx-Mac-mini:~ suning$ xcrun -find clang++
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
编译器应设置为Xcode自带的编译器。修改编译器的方法是:用文本编辑器打开需要修改的config文件,例如poco/build/config/iPhone,将原来的CC与CXX修改为Xcode自带的编译器的路径,例如:
CC=/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
CXX=/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
3、编译静态库(重要)
阅读官网文档:https://pocoproject.org/index.html
(1)从官方文档网站可以得到
-
docs:(User Guides and Tutorials )https://pocoproject.org/docs/
获取信息:用–omit去掉一些依赖、./configure --help 可以查看更多命令
可能依赖OPENSSL
./configure --omit=Data/ODBC,Data/MySQL
(2)把下载下来的源代码解压到桌面;
得到源码后几个文件要多看看:README.md README configure config.make
以及路径 :桌面/poco-master/build/config/ 中的文件各个平台的编译配置脚本
(3)打开终端,进入源代码文件,针对不同的平台架构运行下面的命令:
一、armv7:
修改点用户名:–prefix=/Users/suning/Desktop/Xcode-poco/armv7
$ ./configure --config=iPhone-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"用户名"/Desktop/Xcode-poco/armv7
$ make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv7 install
如果openssl
位置不对,会报错openssl
找不到
解决openssl依赖
- Mac 查看openssl 版本
$ openssl version
LibreSSL 2.6.5
- 没有则安装依赖:
brew install openssl
- 查看openssl位置
$ brew --prefix openssl
/usr/local/opt/openssl
保证参数正确:–include-path=/usr/local/opt/openssl/include
修改后的执行命令
$ ./configure --config=iPhone-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/opt/openssl/include --prefix=/Users/suning/Desktop/Xcode-poco/armv7
$ make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv7 install
错误:
- 多个依赖文件JSON…等没有成功
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C /Users/suning/Desktop/poco-master/JSON
make[1]: Nothing to be done for `all'.
...
- -fembed-bitcode 版本问题
clang: error: -fembed-bitcode is not supported on versions of iOS prior to 6.0
make[1]: *** [/Users/suning/Desktop/poco-master/PageCompiler/bin/iPhoneOS/armv7/static/cpspcd] Error 1
make: *** [PageCompiler-libexec] Error 2
修改:IPHONE_SDK_VERSION_MIN=7.0
$ make IPHONE_SDK_VERSION_MIN=7.0 POCO_TARGET_OSARCH=armv7 install
等待编译…几分钟后结束。
ld: -bind_at_load and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [/Users/suning/Desktop/poco-master/PageCompiler/bin/iPhoneOS/armv7/static/cpspcd] Error 1
make: *** [PageCompiler-libexec] Error 2
这个错误不清楚什么意思,好像是/poco-master/PageCompiler/bin/
路径下的,好像没有影响。
查看库信息
来查看库文件所支持的架构,例如需要查看libPocoData.a所支持的架构,可以使用下面的命令:lipo -info libPocoData.a
在xxx/Desktop/poco-master/lib/iPhoneOS/armv7
下
二、armv7s
./configure --config=iPhone-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/opt/openssl/include --prefix=/Users/suning/Desktop/Xcode-poco/armv7s
make IPHONE_SDK_VERSION_MIN=7.0 POCO_TARGET_OSARCH=armv7s install
三、armv7s
./configure --config=iPhone-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/opt/openssl/include --prefix=/Users/suning/Desktop/Xcode-poco/arm64
make IPHONE_SDK_VERSION_MIN=7.0 POCO_TARGET_OSARCH=arm64 install
四、i386
./configure --config=iPhoneSimulator-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/opt/openssl/include --prefix=/Users/suning/Desktop/Xcode-poco/i386
make IPHONE_SDK_VERSION_MIN=7.0 POCO_TARGET_OSARCH=i386 install
五、iPhoneSimulator-x86_64
./configure --config=iPhoneSimulator-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/opt/openssl/include --prefix=/Users/suning/Desktop/Xcode-poco/x86_64
make IPHONE_SDK_VERSION_MIN=7.0 POCO_TARGET_OSARCH=x86_64 install
六、Darwin64
./configure --config=Darwin64-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/opt/openssl/include --prefix=/Users/suning/Desktop/Xcode-poco/Darwin64
make IPHONE_SDK_VERSION_MIN=7.0 POCO_TARGET_OSARCH=Darwin64 install
说明:
–config | 配置编译脚本,由于Xcode的C和C++编译器是clang和clang++,因此选择iPhone-clang-libc++脚本; |
---|---|
–no-tests和–no-samples | 表示不编译tests文件和samples文件 |
–omit | 在这里面配置自己不需要的库文件 |
–include-path | 用来配置依赖信息,在这里,由于Crypto和 NetSSL_OpenSSL模块依赖于openSSL,因此需要配置openSSL的路径 |
–static | 表示建立静态库文件 |
----prefix | 配置编译好的库文件的存放位置 |
IPHONE_SDK_VERSION_MIN | 设置支持的iPhone的SDK的最低版本 |
POCO_TARGET_OSARCH | 设置平台的架构信息 |
制作通用库文件
可以利用Xcode的lipo命令来制作,其格式如下:
lipo -create armv7/lib/libPocoData.a arm64/lib/libPocoData.a -output iOS/lib/libPocoData.a
⚠️注意:由于Darwin64的架构和iPhoneSimulator-x86_64是相通的架构,因此不能将他们合并在一起。
验证合并后的库:lipo -info libPocoData.a
。
BUILDING WITH CMAKE
在README
文件中介绍了CMAKE 编译方法,要把下载的openssl 放到poco的root/openssl中
不然找不到openssl
The POCO C++ Libraries support CMake as a build system on Linux, macOS and Windows.
To build the POCO C++ Libraries with CMake:
- create a cmake-build directory (e.g. in the POCO root directory):
$ mkdir cmake-build
- and run CMake from there:
$ cd cmake-build
$ cmake …
$ make -s -j
生成的是arm64的。
修改搜索路径
可以通过修改环境变量,将openssl的库路径和头文件路径可以写入系统路径,这样写gcc命令的时候 -I和 -L可以省写在~目录下打开.bash_profile写入
vim ~/.bash_profile
export CPATH=/usr/local/opt/openssl/include
export LIBRARY_PATH=/usr/local/opt/openssl/lib
更新刚配置的环境变量
source .bash_profile
补充
-fembed-bitcode-marker会生成一个最小bitcode的section,但是没有任何内容,size=1。
-fembed-bitcode则会生成bitcode的相关内容
转载:https://blog.csdn.net/shifang07/article/details/102561648