C++ Poco库的PC编译和交叉编译
C++ Poco库的PC编译和交叉编译
flyfish
文章目录
- C++ Poco库的PC编译和交叉编译
- 环境
- 源码下载地址
- PC编译
- 编译依次执行
- CMakeLists.txt文件配置
- 代码实现
- POCO交叉编译配置
- 静态库的编译与使用
- 交叉编译 - 加入OpenSSL的编译方式
环境
Ubuntu18.04
Qt 5.14.2
源码下载地址
https://github.com/pocoproject/poco
PC编译
编译依次执行
./configure --no-tests --no-samples --config=Linux --omit=Data --shared --static
make
sudo make install
–omit表示排除项目,Data中的SQlite,MySQL,ODBC等排除掉,这里不编译
如果要指定安装目录需要加参数 --prefix
,这里是默认目录安装到
/usr/local/lib
/usr/local/include
以http为例说明如何使用
CMakeLists.txt文件配置
cmake_minimum_required(VERSION 3.5)project(example LANGUAGES CXX)set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# set the POCO paths and libs
set(POCO_PREFIX "/usr/local") # the directory containing "include" and "lib"
set(POCO_INCLUDE_DIR"${POCO_PREFIX}/include")
set(POCO_LIB_DIR "${POCO_PREFIX}/lib")
set(POCO_LIBS"${POCO_LIB_DIR}/libPocoNet.so""${POCO_LIB_DIR}/libPocoUtil.so""${POCO_LIB_DIR}/libPocoFoundation.so""${POCO_LIB_DIR}/libPocoNetSSL.so")add_executable(examplemain.cpp
)
target_link_libraries(example "${POCO_LIBS}")
代码实现
#include <iostream>
#include <Poco/Net/HTTPClientSession.h>
#include <Poco/URI.h>
#include <Poco/Net/HTTPCredentials.h>
#include <Poco/StreamCopier.h>
#include <Poco/Net/HTMLForm.h>
#include <Poco/BinaryReader.h>
#include <Poco/StreamConverter.h>
#include <Poco/Net/HTTPBasicCredentials.h>
#include <string>
#include <streambuf>
#include <Poco/Net/FilePartSource.h>
#include <Poco/Net/HTTPRequest.h>
#include <Poco/Net/HTTPResponse.h>
#include <Poco/Net/NetException.h>
#include <Poco/Net/HTTPSClientSession.h>int main(int argc, char *argv[])
{try{Poco::URI url("https://docs.pocoproject.org/current/");Poco::Net::HTTPSClientSession session(url.getHost(),url.getPort());Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET,url.getPathAndQuery());session.sendRequest(req);Poco::Net::HTTPResponse res;std::istream & rs = session.receiveResponse(res);Poco::Net::HTTPResponse::HTTPStatus status = res.getStatus();std::string result;Poco::StreamCopier::copyToString(rs, result);if (Poco::Net::HTTPResponse::HTTPStatus::HTTP_OK == status){std::cout << "status HTTP_OK:"<<status<<std::endl;}else{Poco::StreamCopier::copyToString(rs, result);std::cout << "status error:"<<status<<std::endl;}std::cout << "getReason:"<<res.getReason() <<result<<std::endl;std::cout << "result:"<<result<<std::endl;}catch(Poco::Exception & ex){std::cerr <<"exception error:"<< ex.displayText() << std::endl;}}
当成功的时候,result存储的返回网页的内容,其中getReason的内容已经包括result的内容。
以上是PC版本Poco库的编译和使用
POCO交叉编译配置
更改文件CMakeCache.txt
路径 poco-master/mybuild/CMakeCache.txt
内容如下
CMAKE_CXX_FLAGS:STRING= -pthread -ldl -lrt
文档中说SyslogChannel只应用于unix系统,防止在嵌入式系统中出现问题,
这里在config.h定义
路径 poco-master/Foundation/include/Poco/config.h
#define POCO_NO_SYSLOGCHANNEL
静态库的编译与使用
静态库的编译
配置中不要勾选BUILD_SHARED_LIBS
静态库的使用
静态库有依赖顺序,可以根据编译Poco库时各个模块编译的顺序调整
编译Poco库时各个模块编译顺序如下
[ 33%] Built target Foundation
[ 38%] Built target Encodings
[ 51%] Built target XML
[ 53%] Built target JSON
[ 58%] Built target Util
[ 77%] Built target Net
[ 81%] Built target MongoDB
[ 83%] Built target Redis
[ 90%] Built target Data
[ 92%] Built target DataSQLite
[ 92%] Built target ActiveRecord
[ 93%] Built target ActiveRecordCompiler
[ 98%] Built target Zip
[ 99%] Built target PageCompiler
[100%] Built target File2Page
库的依赖可以使用如下顺序
set(POCO_LIBS${CMAKE_SOURCE_DIR}/poco/lib/libPocoZip.a${CMAKE_SOURCE_DIR}/poco/lib/libPocoDataSQLite.a${CMAKE_SOURCE_DIR}/poco/lib/libPocoData.a${CMAKE_SOURCE_DIR}/poco/lib/libPocoNet.a ${CMAKE_SOURCE_DIR}/poco/lib/libPocoJSON.a${CMAKE_SOURCE_DIR}/poco/lib/libPocoXML.a${CMAKE_SOURCE_DIR}/poco/lib/libPocoUtil.a${CMAKE_SOURCE_DIR}/poco/lib/libPocoEncodings.a${CMAKE_SOURCE_DIR}/poco/lib/libPocoFoundation.a
)
交叉编译 - 加入OpenSSL的编译方式
Poco库配置与上述相同
以poco-1.12.2-all 和openssl-1.1.1q为例
首先要编译OpenSSL,将openssl-1.1.1q更改名字为openssl放置poco-1.12.2-all目录中,然后开始交叉编译,OpenSSL的交叉编译参考
编译完成后配置
CMAKE_MODULE_PATH 设置为 /your_poco_path/poco-1.12.2-all/cmake/V33
勾选库的配置结果
库的依赖可以使用如下顺序
${CMAKE_SOURCE_DIR}/poco/lib/libPocoZip.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoDataSQLite.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoData.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoCrypto.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoNetSSL.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoNet.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoJSON.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoXML.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoUtil.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoEncodings.a
${CMAKE_SOURCE_DIR}/poco/lib/libPocoFoundation.a
C++ Poco库的PC编译和交叉编译相关推荐
- 【Poco学习笔记】Poco库win10下编译(超详细,小白都能看得懂)
目录 前言 一.前期准备 1.1 安装Openssl 1.2 下载Poco的源码 二.编译源码 三.报错 3.1 Foundation_vs160找不到Windows SDK版本8.1 3.1.1 报 ...
- Ubuntu16.04编译poco库
Ubuntu16.04编译poco库 概述 下载 编译 解压 编译 完整编译 部分编译 编译 安装 参考文章 概述 Poco C++库是一系列C++类库,类似Java类库,.Net框架,Apple的C ...
- C++ Poco库编译方法
目录 前言 Windows编译 Linux 编译 1.x86平台编译 2.交叉编译 总结 前言 C++ Poco库是笔者目前最常用的C++跨平台框架库,代码结构简单,提供功能丰富.易编译,好上手,本文 ...
- POCO库的下载和编译
由于最近工作中项目的需求,项目需要实现Windows平台和Linux平台HTTP服务,最终选择QtCreator开发平台 + POCO来实现.所以就设计到POCO库的下载,编译. 1. POCO库的下 ...
- 【vcpkg】POCO库编译链接总结
文章目录 导读 开发环境 POCO 与 Boost 编译过程 POCO库实战 编写测试代码 配置依赖目录 引入头文件和库 编译中遇到的问题 参考资料 导读 上一篇说了<boost编译链接> ...
- 编译Android版本的Poco库
编译Android版本的Poco库 项目需要在android平台使用Poco库,花了些时间成功编译,记录下来以备后用. 编译库总是跟版本有关:编译主机系统为Ubuntu16.04 64位,Poco的版 ...
- linux curl编译 arm交叉编译
虚拟机环境 ubuntu12.04 开发板 EasyARM-i.MX280A: 64m sdram 128M nandflash 运行官方提供的Linux-2.6.35.3内核linux ...
- 下载Poco库并在VS2013中使用
最近才发现项目中居然有Poco库,看了一些类库,功能很强大.于是想在自己的windows pc环境下也将POCO库运行起来. 1 下载POCO https://pocoproject.org/rele ...
- 2、编译、交叉编译概念小记
前言:最近需要编译ffmpeg,然后在andriod端使用,查找拉下资料,差点把自己搞蒙,这概念太...,现记录下,省得以后忘喽. 一.编译 编译是将我们编写的代码翻译成计算机语言的一个过程.我们平常 ...
最新文章
- Transformer应用到建筑行业,CAD设计起飞了
- 如何去掉latex中默认显示的日期
- 华为开源只用加法的神经网络:实习生领衔打造,效果不输传统CNN | CVPR 2020 Oral...
- R语言聚类算法的应用实例
- Web前端技术分享:学习HTML和CSS的5大理由
- 实用工具篇(三):Free Mybatis plugin
- Linux(Ubuntu 19.10)下 Qt5 连接 MySQL(QMYSQL driver not loaded)
- C++ p63作业 2
- 新增字段属性“是否转义”,提高列表展示性能
- Java的日期格式化常用方法
- python读取Himawari-8葵花8标准数据(HSD)
- 迅捷fw325r虚拟服务器设置,Fast迅捷FW325R无线路由器设置
- 分销系统开发 三级分销技术开发
- 深入理解Plasma(四)Plasma Cash
- 2019113_房价预测
- Axure 实现问卷调查(带计时器功能)
- Jmockit对类静态方法mock
- 详解编码器和解码器电路:定义,工作原理,应用,真值表
- Js 在字符串中提取数字
- Linux dig 命令详解(重要)