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编译和交叉编译相关推荐

  1. 【Poco学习笔记】Poco库win10下编译(超详细,小白都能看得懂)

    目录 前言 一.前期准备 1.1 安装Openssl 1.2 下载Poco的源码 二.编译源码 三.报错 3.1 Foundation_vs160找不到Windows SDK版本8.1 3.1.1 报 ...

  2. Ubuntu16.04编译poco库

    Ubuntu16.04编译poco库 概述 下载 编译 解压 编译 完整编译 部分编译 编译 安装 参考文章 概述 Poco C++库是一系列C++类库,类似Java类库,.Net框架,Apple的C ...

  3. C++ Poco库编译方法

    目录 前言 Windows编译 Linux 编译 1.x86平台编译 2.交叉编译 总结 前言 C++ Poco库是笔者目前最常用的C++跨平台框架库,代码结构简单,提供功能丰富.易编译,好上手,本文 ...

  4. POCO库的下载和编译

    由于最近工作中项目的需求,项目需要实现Windows平台和Linux平台HTTP服务,最终选择QtCreator开发平台 + POCO来实现.所以就设计到POCO库的下载,编译. 1. POCO库的下 ...

  5. 【vcpkg】POCO库编译链接总结

    文章目录 导读 开发环境 POCO 与 Boost 编译过程 POCO库实战 编写测试代码 配置依赖目录 引入头文件和库 编译中遇到的问题 参考资料 导读 上一篇说了<boost编译链接> ...

  6. 编译Android版本的Poco库

    编译Android版本的Poco库 项目需要在android平台使用Poco库,花了些时间成功编译,记录下来以备后用. 编译库总是跟版本有关:编译主机系统为Ubuntu16.04 64位,Poco的版 ...

  7. linux curl编译 arm交叉编译

    虚拟机环境 ubuntu12.04 开发板 EasyARM-i.MX280A:   64m  sdram  128M  nandflash   运行官方提供的Linux-2.6.35.3内核linux ...

  8. 下载Poco库并在VS2013中使用

    最近才发现项目中居然有Poco库,看了一些类库,功能很强大.于是想在自己的windows pc环境下也将POCO库运行起来. 1 下载POCO https://pocoproject.org/rele ...

  9. 2、编译、交叉编译概念小记

    前言:最近需要编译ffmpeg,然后在andriod端使用,查找拉下资料,差点把自己搞蒙,这概念太...,现记录下,省得以后忘喽. 一.编译 编译是将我们编写的代码翻译成计算机语言的一个过程.我们平常 ...

最新文章

  1. Transformer应用到建筑行业,CAD设计起飞了
  2. 如何去掉latex中默认显示的日期
  3. 华为开源只用加法的神经网络:实习生领衔打造,效果不输传统CNN | CVPR 2020 Oral...
  4. R语言聚类算法的应用实例
  5. Web前端技术分享:学习HTML和CSS的5大理由
  6. 实用工具篇(三):Free Mybatis plugin
  7. Linux(Ubuntu 19.10)下 Qt5 连接 MySQL(QMYSQL driver not loaded)
  8. C++ p63作业 2
  9. 新增字段属性“是否转义”,提高列表展示性能
  10. Java的日期格式化常用方法
  11. python读取Himawari-8葵花8标准数据(HSD)
  12. 迅捷fw325r虚拟服务器设置,Fast迅捷FW325R无线路由器设置
  13. 分销系统开发 三级分销技术开发
  14. 深入理解Plasma(四)Plasma Cash
  15. 2019113_房价预测
  16. Axure 实现问卷调查(带计时器功能)
  17. Jmockit对类静态方法mock
  18. 详解编码器和解码器电路:定义,工作原理,应用,真值表
  19. Js 在字符串中提取数字
  20. Linux dig 命令详解(重要)

热门文章

  1. vFloppy1.5-虚拟启动软盘
  2. poj Hotel 线段树
  3. 南非醉茄来源的天然产物之活性大盘点
  4. (二) Nginx手机版和PC电脑版网站配置
  5. win10安装ubuntu-GNOME双系统踩坑综合
  6. linux electron-**r 打开正常,配置正常,却用不了
  7. [译]Vue官方成员:Vite生态发展的怎么样了
  8. 痛心!36岁比亚迪员工连上夜班猝死
  9. Linux系统(Centos7)了解DNS服务
  10. 有关笔记本电池校正的方法