【C++】POCO学习总结(二十):交叉编译poco-1.12.5p2

1、版本说明

1.1 poco-1.13

截止2024-07-03,POCO的稳定版本最高为poco-1.13.3,注意从poco-13.0开始需要编译器支持C++17,否则编译时报错。

常见报错有:
1)std::string的append重载版本问题,报错信息如下

no matching functiong for call to std::__cxx11::basic_string<char>::append(const string&, std::__cxx11::basic_string<char>::size_type)

这个错误是因为C++17中 std::string的append方法有重载接口:

void append(const std::string& str, size_t n); // 将str的前n个字符追加到当前字符串的末尾

但是C++11中 std::string的append方法没有该重载接口,因此报错。

2)找不到头文件 string_view
std::string_view 是 C++17 引入的一个类型,用于提供对字符串(如 std::string、字符数组等)的非拥有、只读视图。

1.2 poco-1.12.5p2

poco-1.12.5p2 是对 poco-1.12.5的bug的修复版本。需要编译器支持C++14 C11。
对版本的支持可以在源码目录下:build/config/下的文件中查看,比如交叉编译ARM-Linux中,可以见:

CFLAGS = -std=c11
CXXFLAGS = -std=c++14

1.3 其它版本

其它稳定版本的详细说明参见:https://github.com/pocoproject/poco/releases

1.4 GCC版本和C++版本

1)C++98
GCC 6.1之前版本的默认模式。
可以通过指定编译选项-std=c++98或-std=gnu++98来使用C++98标准。

2)C++11
从GCC 4.8.1版本开始完全支持。
可以通过指定编译选项-std=c++11或-std=gnu++11来使用C++11标准。

3)C++14
从GCC 6.1版本开始完全支持,并且是GCC 6.1到GCC 10(包括)的默认模式。
可以通过指定编译选项-std=c++14或-std=gnu++14来使用C++14标准。

4)C++17
从GCC 7版本开始完全支持,并且是GCC 11版本的默认模式。
可以通过指定编译选项-std=c++17或-std=gnu++17来使用C++17标准。

5)C++20
从GCC 8版本开始陆续支持C++20特性。
可以通过指定编译选项-std=c++20或-std=gnu++20(GCC 9及以前使用-std=c++2a)来使用C++20标准。
但请注意,GCC对C++20的支持可能还未完全成熟。

6)C++23
标准还在发展中。从GCC 11版本开始支持C++23特性。
可以通过指定编译选项-std=c++2b或-std=gnu++2b来使用C++23的初步支持。

2、移植POCO

2.1 版本选择

本人ARM的GCC版本为6.2.1,默认支持C++14,对应POCO最高的版本为poco-1.12.5p2

2.2 依赖库

POCO最小版本(–minimal, 最小版)支持:基础库FUoundation、XML、JSON、Util、Net
POCO默认版本(–typical,典型版本)支持:基础库FUoundation、XML、JSON、Util、Net、Cyrpto、NetSSL、Data、Zip
POCO完整版本(–everything)支持全部功能

POCO最小版本不需要依赖;
POCO默认版本依赖openssl、zlib、MySQL、ODBC、PostgreSQL等库

2.3 编译minimal版

1)修改配置文件
进入源码目录,修改 build/config/ARM-Linux 中 TOOL变量为交叉编译链的前缀:arm-linux-gnueabihf

TOOL	?= arm-linux-gnueabihf

2)执行配置
进入源码目录,执行如下

./configure --config=ARM-Linux --no-test --prefix=/home/laoer/install --shared --static

3)编译、安装

make -j8
make install

2.4 编译typical版(默认版)

2.4.1 编译 openssl

1)源码下载
openssl最好使用1.0.2及以上版本,否则在编译poco-1.12.5时报错:找不到:X509_check_host、X509_check_ip_asc。
这两个接口是在 openssl-1.0.2 引入的
对这个问题的分析可能有误:使用openssl-1.1.1版本也会报错,编译poco时,如果选择编译静态库(–static),在编译示例(make samples)时,总是也报错

本次尝试使用 openssl-1.1.1

官网最新版本下载:https://www.openssl.org/source/index.html
官网历史版本下载:https://www.openssl.org/source/old/index.html

2)配置
不要在交叉编译环境中,即不运行类似sourc sdk/linux-devkit/environment-setup命令,否则报错:perl: XXXX failed
进入源码中,执行配置:

./config no-asm --prefix=/home/laoer/install --cross-compile-prefix=arm-linux-gnueabihf-

3)编译、安装

make -j8
make install

2.4.2 编译zlib

1)源码下载
官网下装源码:https://zlib.net/
从POCO11.8开始支持zlib-1.3.x,目前(2024-07-03)zlib最新版本为1.3.1,可以尝试使用最新的版本。
zlib1.3.1下载:https://zlib.net/zlib-1.3.1.tar.gz

2)配置
交叉编译前,加载交叉编译环境,例如:source sdk/linux-devkit/environment-setup
环境变量中,会配置好CC、CFLAGS等变量,根据自己的环境来设置。
设置好环境变量,在配置zlib时,只需指定安装目录即可,因为是交叉编译,默认会安装到系统中,因此设置安装目录还是有必要的。

执行:

./configure --prefix=/home/laoer/install

在打印信息中,可以看到arm-linux-gnueabihf-gcc字样,说明交叉编译环境是正确的。

Checking for shared library support...
Building shared library libz.so.1.3.1 with arm-linux-gnueabihf-gcc.
Checking for size_t... Yes.
Checking for off64_t... Yes.
Checking for fseeko... Yes.
Checking for strerror... Yes.
Checking for unistd.h... Yes.
Checking for stdarg.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for attribute(visibility) support... Yes.

3)编译、安装

make -j8
make install

2.4.3 编译POCO

1)修改配置文件
进入源码目录,修改 build/config/ARM-Linux 中 TOOL变量为交叉编译链的前缀:arm-linux-gnueabihf

TOOL	?= arm-linux-gnueabihf

2)执行配置
进入源码目录,执行如下,注意:这里没有选择编译静态库(–static),因为在编译samples时,总是报和 openssl 相关的错误。

./configure --config=ARM-Linux --no-test --prefix=/home/laoer/install --shared  \--omit=Data/PostgreSQL,Data/ODBC,Data/MySQL  \--include-path=/home/laoer/install/include \--library-path=/home/laoer/install/lib

3)3)编译、安装

make -j8
make install

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang 基于 archive/zip 包实现文件

这里写自定义目录标题 摘要引言Go语言简介archive/zip 包概述&#xff1a;环境准备基础概念&#xff1a;压缩的基本概念&#xff1a;解压缩的基本概念&#xff1a;ZIP格式的特点&#xff1a;ZIP文件的组成&#xff1a;使用ZIP的优点&#xff1a; 使用 archive/zip 包进行文件压…

利用Arcgis绘制克吕金插值图

工作中我们常用到克吕金插值图&#xff0c;下面简单介绍下使用Arcmap绘制克吕金插值图的方法及注意事项&#xff0c;希望能帮到大家。 一、准备工作 软件&#xff1a;Arcgis 数据&#xff1a;点图层、研究范围 二、操作步骤 1 添加数据 打开Arcmap&#xff0c;从添加位置将…

WIN32核心编程 - 进程操作(二) 遍历进程 - 进程通信

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 遍历进程 CreateToolhelp32Snapshot EnumProcesses NtQuerySystemInformation 进程通信 clipboard FileMapping NamedPipe Mailslot 遍历进程 CreateToolhelp32Snapshot #include &l…

JAVA数字化产科管理平台源码:涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理

JAVA数字化产科管理平台源码&#xff1a;涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理 智慧产科管理系统是基于自主研发妇幼信息平台&#xff0c;为医院产科量身打造的信息管理系统&#xff0c;涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全…

Go语言实现的端口扫描工具示例

Go语言实现的端口扫描工具示例 创建一个端口扫描工具涉及到网络编程和并发处理&#xff0c;下面是一个简单的Go语言实现的端口扫描工具示例。这个工具会扫描指定IP地址的指定范围内的端口。 请注意&#xff0c;使用端口扫描工具可能会违反某些网络的使用条款&#xff0c;甚至…

企商在线出席2024全球数字经济大会城市副中心论坛

2024年7月3日&#xff0c;2024全球数字经济大会城市副中心论坛“数字基础设施绿色创新发展分论坛”在北京市通州区成功举办。企商在线产品及解决方案总监孙杰受邀出席本次会议&#xff0c;并参与圆桌对话环节&#xff0c;分享“绿色”发展思路与经验。 2024全球数字经济大会城市…

FFMpeg rtmp 无压缩推送本地yuv文件 压缩推送本地yuv文件

可以借鉴的&#xff1a;C使用FFmpeg实现YUV数据编码转视频文件_C 语言_脚本之家 yuv文件下载地址&#xff1a;YUV Sequences 无压缩的方式推送本地yuv文件 代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <iostream> extern "C&…

【代码随想录02】977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

977. 有序数组的平方 题目描述 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 做题思路 由于原数组存在负数&#xff0c;所以平方后最大值可能出现在两端。因此可以采用双指针法&#xf…

身边有填报志愿需求别错过!张雪峰透露今年志愿填报技巧:报专业,别报行业!(文末附稳定高薪专业推荐)

高考填报志愿是每个考生和家长都要面对的重大抉择。在当前就业形势日趋严峻、部分行业发展前景不明朗的大背景下,考生在填报志愿时更需要全面了解各个专业的就业前景,理性权衡自身兴趣特长与社会需求&#xff0c;而不是盲目跟风报考所谓的"热门专业"。 今天跟大家分…

期权开户零门槛怎么操作?期权不满50w的开户方式

今天带你了解期权开户零门槛怎么操作&#xff1f;期权不满50w的开户方式。在股票期权市场上&#xff0c;期权交易是一种非常受欢迎的投资方式。它不仅可以增加投资组合的多样性&#xff0c;还可以为投资者提供一定的保护和利润机会&#xff0c;比如通过买入认股期权做空对冲大盘…

如何选择视频号矩阵系统:打造高效短视频内容生态的指南

在短视频内容创作和分发的热潮中&#xff0c;视频号矩阵系统作为一种高效的管理工具&#xff0c;受到了越来越多创作者和品牌的青睐。它通过集中管理多个视频号&#xff0c;优化内容发布流程&#xff0c;帮助用户提升工作效率和内容影响力。本文将探讨如何选择一个合适的视频号…

振弦采集仪的工程安全监测实践与案例分析

振弦采集仪的工程安全监测实践与案例分析 振弦采集仪是一种常用的工程安全监测仪器&#xff0c;通过测量被监测结构的振动频率与振型&#xff0c;可以实时监测结构的安全状况。本文将结合实践经验和案例分析&#xff0c;探讨振弦采集仪在工程安全监测中的应用。 一&#xff0c…

欢乐钓鱼大师游戏攻略:在什么地方掉称号鱼?云手机游戏辅助!

《欢乐钓鱼大师》是一款融合了休闲娱乐和策略挑战的钓鱼游戏。游戏中的各种鱼类不仅各具特色&#xff0c;而且钓鱼过程充满了挑战和乐趣。下面将为大家详细介绍如何在游戏中钓鱼&#xff0c;以及一些有效的钓鱼技巧&#xff0c;帮助你成为一个出色的钓鱼大师。 实用工具推荐 为…

io_contextttttttttttt

创建上下文——io_context_t 它是一个上下文结构&#xff0c;在内部它包含一个完成队列&#xff0c;在线程之间是可以共享的。 提交请求——iocb io回调数据结构&#xff0c;和io_submit配合使用。 处理结果 通过io_event处理结果&#xff0c; struct io_event {void *data…

搜狗输入法产品使用说明

搜狗输入法产品使用说明 (qq.com) 看这里&#xff0c;这里记录下。基本都用这个&#xff0c;里面还是有很多小技巧不知道&#xff0c;可以参考下。

【刷题汇总--Fibonacci数列、单词搜索、杨辉三角】

C日常刷题积累 今日刷题汇总 - day0041、Fibonacci数列1.1、题目1.2、思路1.3、程序实现 2、单词搜索2.1、题目2.2、思路2.3、程序实现 3、杨辉三角3.1、题目3.2、思路3.3、程序实现 - 蛮力法3.4、程序实现 - vector3.5、程序实现 - dp 4、题目链接 今日刷题汇总 - day004 1、…

【CUDA】 矩阵乘向量 matVecMul

Matrix - Vector Multiplication 矩阵-向量乘法是线性代数中的基本操作。它用于将一个矩阵与一个向量相乘。乘法的结果是与输入向量大小相同的向量。 矩阵和向量的乘法如图1所示。 图1 基础kernel与共享内存kernel 执行矩阵-向量乘法的基础kernel是使用单个线程执行输出向量…

【SOLID原则前端中的应用】开闭原则(Open/Closed Principle)- vue3示例

开闭原则&#xff08;Open/Closed Principle&#xff09;在Vue 3中的应用 开闭原则&#xff08;Open/Closed Principle&#xff0c;OCP&#xff09;规定&#xff0c;软件实体&#xff08;类、模块、函数等&#xff09;应该对扩展开放&#xff0c;对修改关闭。 也就是说&#xf…

大型网站软件系统架构演进过程

在我们的生活中,通常会使用大型网站系统,比如购物网站淘宝,京东,阿里1688;大型搜索引擎网站百度,社交类的如腾讯旗下的微信,QQ及新浪旗下的微博等,他们通常都有一下特点: 高并发、大流量&#xff1a;这些系统必须能够处理成千上万甚至数百万的并发用户请求&#xff0c;以及持续…

Dubbo内部通信流程

我当时在学习的过程中搭建过demo&#xff0c;具体流程就是&#xff0c;我先定义了一个api接口模块&#xff0c;还定义一个服务提供者模块&#xff0c;然后服务提供方实现该接口&#xff0c;定义该方法具体的实现impl类&#xff0c;服务提供方启动时&#xff0c;将要暴露的服务和…