一、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

  

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

  1. iOS - 编译WebRTC.a静态库

    编译WebRTC.a静态库 编译的方式,我看了几个帖子,什么方法都有,这里我根据我的需求,说说我的做法.我的主要目的是因为网上找不到.a模式的webrtc的静态库,都是framework,所以我才自己 ...

  2. xcode 4 制作通用静态库

    参考:http://blog.csdn.net/pjk1129/article/details/7255163 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者F ...

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

    在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件 Android.mk文件: Android提供的一种makefile文件, ...

  4. Xcode下开发c静态库for ios CPU架构 静态库合并

    新建一个Cocoa Touch Static  Library工程 1,先在工程左侧删除“工程名Tests”下的文件与文件夹(从内往外删,最后删除"工程名Tests文件夹") :D ...

  5. FFmpeg笔记:使用MSVC工具链编译Windows版本静态库、动态库

    2019年3月开始,为了将音视频编解码功能集成到Cocos2d-x中,开始接触到FFmpeg: 当时开发环境还在Mac下,编译FFmpeg相比现在用Windows平台要方便的多: 最近,公司内部有个U ...

  6. [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)

    在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...

  7. VS2010编译链接openssl静态库

    最近工作需要使用一些加密算法.之前尝试过cryptopp以及polarssl,听说openssl中的加密模块特别全,并且特别好用.于是想尝试一下. 一.环境配置 下载openssl,我这里使用的是op ...

  8. protobuf使用NDK编译Android的静态库(工作记录)

    1.protobuf 编译过程 前提: 确保自己电脑上已经安装了cygwin + ndk, 并且NDK能够编译hello-jni成功 1.1 把protobuf 压缩包解压到protobuf文件夹下 ...

  9. (iOS)谈谈关于使用category的静态库(原创)

    最近在一个项目中使用了一个包含catecategory 的静态库,但是此项目在运行过程中,该静态库调用 category 增加的方法处,却报 selector not recognized 异常,会直 ...

随机推荐

  1. hdu4727 The Number Off of FFF

    理解错题意,wa了几次. 我一开始的理解忽略了实际背景,认为错报是绝对的,不依赖于其左边的人. 而实际上某士兵报数的对错取决且仅取决于他所报的数与其左邻所报的数. 所以假设第一个人没有报错,则其后必有 ...

  2. vi编辑文件E437: terminal capability "cm" required 解决办法

    E437: terminal capability "cm" required 这个错误一般是环境变量TERM没有配置或者配置错误所致. 解决办法: 执行export TERM=x ...

  3. HDU(4734),数位DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4734 F(x) Time Limit: 1000/500 MS (Java/Others) ...

  4. jquery的ajax向ashx传值,中文乱码问题

    从网上查找了很多资料: 有在配置文件里面加如下配置 <globalization responseEncoding="utf-8" requestEncoding=" ...

  5. common-pool2 使用

    common-pool2提供了3中对象池管理方式,它们的使用方式基本一样,这里以GenericObjectPool对象池为例介绍其使用方式,一般实现自己的对象池需要经过2个步骤 1.实现PooledO ...

  6. hnu Dirichlet's Theorem

    /* 求ax+b x属于区间[L,R];范围内素数的个数. a*R+b<=10^12 ; R-L+1<=10^6 枚举,超时. 1.如果GCD(a,b)>1 那么a+b 2*a+b ...

  7. NSIS学习记录の----NSIS多语言安装以及详解

    NSIS多语言安装,很多教程提供了详细的代码,但是代码中某些语句的含义我还是不很明白,作为一个吃螃蟹的人,我做一个解释,避免很多小伙伴和我哟U一样的误区,以下结论都是自己根据实践得来,若发现理解错误, ...

  8. 我的android学习经历29

    四大组件之广播接收者BroadcastReceiver 新建广播接收器 需要新建一个类继承类BroadcastReceiver,并且重写其中的方法onReceive(),不要在这个方法中添加过多的逻辑 ...

  9. C#占位符与格式化字符串

    原文地址:http://www.cnblogs.com/fumj/articles/2380290.html 在c#中有两种方式可以输出多个字符 其中的一种: static void Main()   ...

  10. 【leetcode❤python】231. Power of Two

    #-*- coding: UTF-8 -*- class Solution(object):    def isPowerOfTwo(self, n):        if(n<=0):     ...