iOS——为Xcode编译POCO C++静态库

一、POCO C++ library简介

  POCO C++ library是一个C++编写的跨平台库,主要实现网络连接、数据库管理以及服务器,适用于跨平台、嵌入式。

二、为Xcode编译POCO C++ 静态库

  1、确定需要编译的版本

  要想使POCO C++在iOS的各个平台上运行,那么需要针对各个平台的不同架构进行编译,因此我们需要了解iOS各个平台的架构,主要分为iPhone模拟器、iPhone真机以及运行Xcode电脑本身的架构。

  (1)iPhone模拟器

  目前iPhone模拟器架构分为两类:

  *iPhone5及以下版本的模拟器的架构是i386;

  *iPhone5以上(不包括iPhone5)版本的模拟器的架构是x86_64;

  (2)iPhone真机

  iPhone真机的架构有armv7,armv7s和arm64;  

  (3)OSX

  OSX的架构是x86_64;

  由以上可知,我们需要为armv7,armv7s,arm64,i386,iPhone模拟器x86_64以及电脑x86_64的静态库。

  2、编译器选择

  编译器应设置为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++

  在目前的Xcode中,C语言用clang编译器,在Xcode中的路径:/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang;

  在目前的Xcode中,C++语言用clang++,在Xcode中的路径:/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++;

  一般来说,在POCO的配置的编译脚本中都不需要我们手动配置编译器,脚本命令会自己找到对应的编译器。

  3、编译静态库

  (1)官网下载源代码:http://pocoproject.org/download/index.html

  (2)把下载下来的源代码解压到桌面;

  (3)打开终端,进入源代码文件,针对不同的平台架构运行下面的命令:

  1)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

  2)armv7s

  ./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/armv7s

   make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv7s install

  3) arm64

  ./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/arm64

   make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=armv64 install

  4) i386

  ./configure --config=iPhoneSimulator-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"用户名"/Desktop/Xcode-poco/i386

   make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=i386 install

  5) iPhoneSimulator-x86_64

  ./configure --config=iPhoneSimulator-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"用户名"/Desktop/Xcode-poco/iPhoneSimulator-x84_64

   make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=x86_64 install

  6)Darwin64

  ./configure --config=Darwin64-clang-libc++ --no-tests --no-samples --omit=Data/MySQL,Data/ODBC --static --include-path=/usr/local/openssl/include --prefix=/Users/"用户名"/Desktop/Xcode-poco/Darwin64

   make IPHONE_SDK_VERSION_MIN=5.0 POCO_TARGET_OSARCH=x86_64 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                  设置平台的架构信息

  4、制作通用库文件

  (1)制作通用库

  这样我们就得到了各个架构的多个库文件,为了使用方便,我们可以制作通用库文件,可以利用Xcode的lipo命令来制作,其格式如下:

    lipo -create 需要合并的文件 -output 生成的目标文件;

  例如,需要将armv7/lib/libPocoData.a与arm64/lib/libPocoData.a合并为iOS/lib/libPocoData.a使用下面的命令:

    lipo -create armv7/lib/libPocoData.a arm64/lib/libPocoData.a -output iOS/lib/libPocoData.a

  注意:由于Darwin64的架构和iPhoneSimulator-x86_64是相通的架构,因此不能将他们合并在一起。

  (2)查看库信息

  可以通过:

    lipo -info 需要查看的库文件

  来查看库文件所支持的架构,例如需要查看libPocoData.a所支持的架构,可以使用下面的命令:

    lipo -info libPocoData.a

  

时间: 2024-09-26 21:11:43

iOS——为Xcode编译POCO C++静态库的相关文章

xcode 4 制作通用静态库

参考:http://blog.csdn.net/pjk1129/article/details/7255163 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework. 我这个文档的静态库的开发是基于Xcode4.2和iOS SDK5.0编写的.Xcode4跟之前的Xcode3还是有不少的差别的.下面就简单写一个静态库和一个调用静态库的例子.静态库的编写:1.静态库工程的建立: Xcode New一个新的project,选择IOS下面的Frame

g++编译使用生成静态库和动态库(Linux)

参考文献: Linux下g++编译与使用静态库和动态库 用g++编译生成动态链接库*.so的方法及连接(多个.cc生成一个*.so) 占坑

编译 python 生成静态库 libpython2.7.so

由于我们是C++作驱动的Python开发,驱动需要加上Python静态库libpython2.7.so.libpython2.7.so.1.0.libpython2.7.a.此处我想在python源码上加上自己加的log,因此要重新编译Python生成静态库,再生成驱动. 一般快速编译安装Python源码步骤: ./configure make make install 如果要生成静态库libpython2.7.so.libpython2.7.so.1.0.libpython2.7.a,则为:

Windows下编译libcurl.lib静态库

1.下载最新版的libcurl,我的是curl-7.44.0.zip,解压,进入目录winbuild,仔细阅读BUILD.WINDOWS.txt这篇文档 打开VS2013 开发人员命令提示并执行nmake /f Makefile.vc mode=static VC=12 完成编译后libcurl静态库会出现在builds目录下包括头文件和libcurl_a.lib,我们需要的是builds/libcurl-vc12-x86-release-static-ipv6-sspi-winssl下面的in

VS2013编译Qt5.4静态库

设置了一天,这静态编译也总算是虐出来了...Qt 的静态编译简直不要太麻烦啊... 感谢这位大神提供的方法 http://zerooverture.com/tutorials/qt/737.html 工具下载: http://pan.baidu.com/s/1hq2Cff2 一.环境配置 我目前用的系统是Windows 7 64bit,请注意安装好以下软件,以及配置好环境变量: Visual Studio 2013 python perl 安装好以上软件 请用cmd测试下 python和perl

android开发 NDK 编译和使用静态库、动态库 (转)

在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件 Android.mk文件: Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk. Application.mk文件: 定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库).APP_PLATFORM := android-9(使用

android开发 NDK 编译和使用静态库、动态库

在eclipse工程目录下建立一个jni的文件夹. 在jni文件夹中建立Android.mk和Application.mk文件. Android.mk文件: Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk. Application.mk文件: 定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库).APP_PLATFORM := android-9(

Xcode中导入.a静态库后报错添加-force_load或-all_load

第一种方法: 以前在做项目的时候在Xcode中倒入一个三方SDK的时候,会有一些.a的静态库,这时候如果直接编译运行就会报错.当时只知道往build settings的linker flags 里面添加-force_load和.a文件的路径.最近又多次用到,这里总结一下. 例如在Xcode中倒入一个SIPSKDK,如下,这里面包含了一个.a的静态库. 如果直接运行的没用到里面方法的时候运行时没问题的,但是一旦导入头文件,并创建SIPClient对象的时候就会报错,如下所示: 这里报错的原因主要是

iOS开发,创建自己的静态库

为什么要创建自己的静态库?嗯,是为了装13.好,作为一名优秀的程序猿,我是不会放过任何一个装13的技能的,今天就再分享一个技能--自己生成静态库. 不开玩笑了,下边正式开始. 一.用Xcode新建一个工程,如下: 看清楚啦,一定要选中"static library"这个. 二.给你的静态库命名,这一环节我就略过了.下图是我创建出来的工程 2.1.在头文件中,将你想公开出去的方法名写在这里,如图(示例方法是输入一个千分位表示的金额字符串,转化为整型数) 2.2.将实现部分写在.m文件中.