【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,一经查实,立即删除!

相关文章

利用Arcgis绘制克吕金插值图

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

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

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

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

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

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

高考填报志愿是每个考生和家长都要面对的重大抉择。在当前就业形势日趋严峻、部分行业发展前景不明朗的大背景下,考生在填报志愿时更需要全面了解各个专业的就业前景,理性权衡自身兴趣特长与社会需求&#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…

【刷题汇总--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;将要暴露的服务和…

在线快速制作二维码的技巧,支持生成多种内容二维码

现在用二维码来分享内容是很多场景下会使用的一种方式&#xff0c;常见的展示内容有图片、文件、文本、音频、视频等&#xff0c;都可以生成二维码之后。通过手机扫码来查看内容&#xff0c;有利于内容的快速传播&#xff0c;并且用户获取信息也更加的方便。 下面来教大家使用…

Web应用防火墙用在哪些场景?

WAF是Web Application Firewall的缩写&#xff0c;翻译为“Web应用防火墙”是一种网络安全设备或服务&#xff0c;用于保护Web应用程序免受各种网络攻击和漏洞的影响。 WAF特别设计用于识别和阻止特定于Web应用程序的攻击&#xff0c;例如SQL注入、跨站脚本(XSS)、跨站请求伪造…

力扣习题--哈沙德数

一、前言 本系列主要讲解和分析力扣习题&#xff0c;所以的习题均来自于力扣官网题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 二、哈沙德数 1. 哈沙德数 如果一个整数能够被其各个数位上的数字之和整除&#xff0c;则称之为 哈沙德数&#xff08;Harshad number&…

CTF常用sql注入(二)报错注入(普通以及双查询)

0x05 报错注入 适用于页面无正常回显&#xff0c;但是有报错&#xff0c;那么就可以使用报错注入 基础函数 floor() 向下取整函数 返回小于或等于传入参数的最大整数。换句话说&#xff0c;它将数字向下取整到最接近的整数值。 示例&#xff1a; floor(3.7) 返回 3 floor(-2…

5.基于SpringBoot的SSMP整合案例-数据层开发

目录 1.新建项目 2.实体类开发&#xff1a; 2.1在pom.xml中增加Lombok坐标&#xff1a; 2.2添加Book实体类 3.数据层开发&#xff1a; 3.1 配置MyBatisPlus与Druid 3.2创建数据层接口 3.3写测试类 3.4点击运行&#xff1a; 4.数据层快速开发&#xff1a; 4.1配置MyB…

C++视觉开发 四.手势识别

本章记录传统手势识别&#xff0c;在表示0-5六个数值时的识别问题。例如识别剪刀石头布&#xff0c;手势&#xff0c;以及其表示的动作。在识别时将手势中的凹陷区域称为凸缺陷&#xff0c;其个数作为识别的重要依据。 需要注意&#xff0c;在凸缺陷个数为0时&#xff0c;无法…