linux编译poco静态库,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、编译静态库

(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

818803088cd90dc25fb5ea756d69152c.png

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

798092552da3a66564e172cb9fa5b1f9.png

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

(2)查看库信息

可以通过:

lipo -info 需要查看的库文件

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

lipo -info libPocoData.a

a4a3aa770ce2786800bfbf397ea57d8f.png

iOS - 编译WebRTC.a静态库

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

xcode 4 制作通用静态库

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

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

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

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

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

VS2010编译链接openssl静态库

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

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

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

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

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

iOS 在工程内部创建一个静态库target

当你在开发项目的时候需要把公用的东西打包出来,其他项目方便使用的时候,打包成静态库是你的最优选择,在工程内部开发的时候新建一个target进行静态库的开发可以使你的开发调试更加方便而不是单独新建一个工 ...

随机推荐

[PHP源码阅读]explode和implode函数

explode和implode函数主要用作字符串和数组间转换的操作,比如获取一段参数后根据某个字符分割字符串,或者将一个数组的结果使用一个字符合并成一个字符串输出.在PHP中经常会用到这两个函数,因此 ...

Python帮助文档中Iteration iterator iterable 的理解

iteration这个单词,是循环,迭代的意思.也就是说,一次又一次地重复做某件事,叫做iteration.所以很多语言里面,循环的循环变量叫i,就是因为这个iteration. iteration指 ...

本地搭建PHP环境后进入应用失败

进入localhost/wordpress或者其他应用,直接出现类似以下这种情况: 解决方法是修改tomcat的配置文件httpd.conf中: ...

mysql5.7.11编译安装以及修改root密码小结

系统是cenos6.7 64位的,默认mysql5.7.11下载到/usr/local/src,安装目录在/app/local/mysql目录下,mysql数据放置目录/app/local/data. ...

浅析Struts1和Struts2的Action线程安全问题 转

浅析Struts1和Struts2的Action线程安全问题  转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...

moment 和ko 绑定msdate格式的日期值(静态text)

CMAKE的使用

CMAKE的使用 Version 1.0 2009-3-18 一.      基本使用 安装:下载二进制包后可直接解压使用 从源码安装则执行命令:./bootstrap; make; make ins ...

面试常考---html篇

1.html5新特性,语义化 HTML5为我们提供了一系列的语义标签. 1. 定义文档中的主体部分的节.段. 2.

git操作github仓库基本操作

一.登录 首次登录 $ git config --global user.name "Your Name" $ git config --global user.email ‘yo ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值