Openssl数据安全传输平台017:Linux客户端代码的编译与调试-Bug记录

文章目录

  • 1 在windows上先预编译
  • 2 Centos上进入项目文件夹进行编译
    • 2.0 `最终的编译指令`
    • 2.1 找不到lprotobuf,找不到protobuf的google文件夹
      • 2.1.1 编译指令及提示
      • 2.1.2 问题分析
      • 2.1.3 解决办法
    • 2.2 json类中方法unreference
      • 2.2.1 编译指令及提示
      • 2.2.2 问题分析
    • *** 最终的编译指令,客户端启动成功
    • 2.3 ----------由版本不兼容导致-找不到动态库ljson - 旧版本的其他问题
    • 2.4---------- 动态库软链接失效
    • 2.5 ----------undefined reference to `Json::Value::asString[abi:cxx11]() const

1 在windows上先预编译

除了找不到库和目录的问题,其他的都应该在windows上解决。这个时候客户端代码在widows上编译,除了protobuf找不到目录,其他的基本没有什么问题。
在这里插入图片描述

在这里插入图片描述
然后打开虚拟机,项目文件已经在/home/projects目录下了

在这里插入图片描述

2 Centos上进入项目文件夹进行编译

2.0 最终的编译指令

g++ *.cpp *.cc  -lpthread -ljsoncpp -lprotobuf  -lcrypto   -locci -lclntsh -std=c++11  

2.1 找不到lprotobuf,找不到protobuf的google文件夹

  • 2.1.1 编译指令及提示

// 找不到protobufg++ *.cpp *.cc -ljson -lpthread -lprotobuf -lcrypto -locci -lclntsh -std=c++11

在这里插入图片描述

2.1.2 问题分析

protobuf部署的时候,这个文件夹我安装的时候,是把windows下编译的库直接放在了centos的下面这个路径,执行文件、库、google文件夹都没整理。

后来我才明白,Windows下的动态库是.dll,Linux上的是.so,两者不通用。Linux环境下需要重新在Linux环境中编译源码。

2.1.3 解决办法

在Linux上重新部署Protobuf,参考如下(重写了一遍)

Openssl数据安全传输平台003:Protobuf3.17.2 - 部署 - Windows/ Centos8:

https://blog.csdn.net/jiangchufeng123/article/details/133918080

再次编译,跟protobuf和google文件夹相关的bug就消除了

在这里插入图片描述

2.2 json类中方法unreference

2.2.1 编译指令及提示

在这里插入图片描述

2.2.2 问题分析

这个bug我找了很久,后来发现是因为json版本跟centos上gcc版本和代码格式不兼容导致的。

代码使用的json新版解析风格,但是部署json的时候参考的黑马教学视频用的旧版。

我甚至一度以为json和jsoncpp是两个不同的库。直到睡了一觉醒来,觉得不对劲,json就是一个东西,不可能有两个动态库。后面在编译指令中去除了老版本的json库,系统中删除了老版本的动态库文件,重新编译就好了。

相应的,我也修改了json的部署教程。

Openssl数据安全传输平台010:jasoncpp 1.9.5编译及常用API-
Windows/Centos8-含测试代码:
·
https://blog.csdn.net/jiangchufeng123/article/details/134024850

然后重写Json部署教程的时候,在官网看到了说明…0.10.X的版本不能使用C++11…
在这里插入图片描述

*** 最终的编译指令,客户端启动成功

g++ *.cpp *.cc  -lpthread -ljsoncpp -lprotobuf  -lcrypto   -locci -lclntsh -std=c++11  

在这里插入图片描述

2.3 ----------由版本不兼容导致-找不到动态库ljson - 旧版本的其他问题

在这里插入图片描述

/以下仅用作排除bug的参考,并不能解决实际问题/

在这里插入图片描述

  • 分析

通常在软件编译时出现的usr/bin/ld: cannot find -lxxx的错误,主要的原因是库文件并没有导入的ld检索目录中。

  1. 确认库文件是否存在,比如-l123, 在/usr/lib/usr/local/lib,或者其他自定义的lib下有无lib123.so, 如果只是存在lib123.so.1,那么可以通过ln -sv lib123.so.1 lib123.so,建立一个连接重建lib123.so.

  2. 检查/etc/ld.so.conf中的库文件路径是否正确,如果库文件不是使用系统路径,/usr/lib, /usr/local/lib,那么必须在文件中加入。

  3. ldconfig重建ld.so.cache文件,ld的库文件检索目录存放文件。尤其刚刚编译安装的软件,必须运行ldconfig,才能将新安装的

  • 重新编译还是不对,因为我把库改成了依赖库的路径-L/usr/include/json,其实就是这里少加了个-ljson
  • 出错原因:增加了依赖库的路径,同时要指定连接的库

在这里插入图片描述

// 增加了依赖库路径和库g++ *.cpp *.cc -L/usr/include/json -ljson -lpthread -lcrypto -lprotobuf -locci -lclntsh -std=c++11

2.4---------- 动态库软链接失效

在处理2.1 这个问题的时候还出现了个小错误,创建动态库的链接文件失效了,我到Centos里面直接找到了这个链接查看properties的时候,发现显示broken

于是我用root用户删除libjson.so,然后又重新链接了一次:ln -s /lib/libjson_linux-gcc-11_libmt.so /lib/libjson.so,然后再次使用上述命令,bug就少了几个。
在这里插入图片描述

2.5 ----------undefined reference to `Json::Value::asStringabi:cxx11 const

在这里插入图片描述

一般出现cxx11 const’ 应该都是gcc的版本不一样。 我遇到的情况是jsoncpp生成的动态库和依赖它而生成的动态库的gcc版本不同。

  1. GCC5.1发布时,为libstdc++添加了新的特性,旧版就无法兼容了。为了避免混乱,对于旧版而言,有旧版(c++03规范)的libstdc++.so。也就是说有两个库,旧版(c++03规范)的libstdc++.so和新版(c++11规范)的libstdc++.so同时存在。

  2. 为了避免两个库到底选择哪一个的麻烦,GCC5.1就引入了-D_GLIBCXX_USE_CXX11_ABI来控制编译器到底链接哪一个libstdc++.so

-D_GLIBCXX_USE_CXX11_ABI=0 链接旧版库
-D_GLIBCXX_USE_CXX11_ABI=1 链接新版库

其实到这里,我才意识到json的部署有问题,然后跟换了新版的json,就能正常编译和运行了。

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

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

相关文章

【工具使用】NPS内网穿透工具介绍

文章目录 前言一、内网穿透二、NPS概述三、NPS原理四、NPS服务器搭建(一)云服务器配置 五、NPS内网穿透演示(一)演示案例一(二)演示案例二 六、NPS内网穿透检测建议(一)流量监控(二)流量协议分析(三)网络行为异常检测 七、NPS内网穿透防范建议(一)阻止或隔离流量(二)更新和强化…

[架构之路-245/创业之路-76]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 企业资源管理计划ERP

目录 前言: 一、企业信息化的结果:常见企业信息化软件 1.1 企业资源管理计划 1.1.1 什么是ERP:企业最常用的信息管理系统 1.1.2 ERP的演进过程 1.1.3 EPR模块 1.1.4 EPR五个层级 1.1.5 企业EPR业务总体流程图 1.1.6 什么类型的企业需…

常用 sqlite3 命令

本次将向您讲解 SQLite 编程人员所使用的简单却有用的命令。这些命令被称为 SQLite 的点命令,这些命令的不同之处在于它们不以分号 ; 结束。 让我们在命令提示符下键入一个简单的 sqlite3 命令,在 SQLite 命令提示符下,您可以使 用各种 …

【MyBatis Plus】初识 MyBatis Plus,在 Spring Boot 项目中集成 MyBatis Plus,理解常用注解以及常见配置

文章目录 一、初识 MyBatis Plus1.1 MyBatis Plus 是什么1.2 MyBatis Plus 和 MyBatis 的区别 二、在 Spring Boot 项目中集成 MyBatis Plus2.1 环境准备2.2 引入 MyBatis Plus 依赖2.3 定义 Mapper2.4 测试 MyBatis Plus 的使用 三、MyBatis Plus 常用注解3.1 为什么需要注解3…

【C++初探:简单易懂的入门指南】二

【C初探:简单易懂的入门指南】二 1.引用1.1引用做函数的参数1.2 引用做返回值1.2.1 关于引用做返回值的几点补充 1.3 多引用(对一个变量取多个别名)1.4 引用类型一致性原则以及权限的问题阐述1.5引用的效率问题1.6引用和指针的比较 2.auto关键字2.1 auto关键字的使用…

共谈信创谋发展 | 开源网安主办的信创生态构建沙龙圆满完成

​10月26日,由珠海市工业和信息化局、珠海市高新区科技创新和产业发展局指导,珠海华发产业园与开源网安珠海公司等联合主办的“赋能数字转型 提速国产替代”—Uni-Idea信创生态构建沙龙在华发信创产业园成功举办,近百位行业代表参加本次活动&…

使用requests库进行HTTP爬虫编程

目录 一、安装requests库 二、发送HTTP请求 三、解析HTML页面 四、处理HTTP响应和异常 五、使用代理和会话管理 六、使用多线程或多进程提高效率 七、数据存储和处理 八、注意事项和总结 在当今的数字化世界中,数据已经成为了一种宝贵的资源。而网络爬虫程序…

基本微信小程序的体检预约小程序

项目介绍 我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,体检预约系统小程序被用户普遍使用,为方便用户…

使用ControlNet生成视频(Pose2Pose)

目录 ControlNet 介绍 ControlNet 14种模型分别是用来做什么的 ControlNet 运行环境搭建 用到的相关模型地址 ControlNet 介绍 ControlNet 是一种用于控制扩散模型的神经网络结构,可以通过添加额外的条件来实现对图像生成的控制。它通过将神经网络块的权重复制到…

OPNET <<< Program Abort >>> Standard function stack imbalance

OPNET <<< Program Abort >>> Standard function stack imbalance OPNET 问题原因及解决办法 OPNET 问题 OPNET仿真时遇到此问题&#xff1a; <<< Program Abort >>> Standard function stack imbalance 原因及解决办法 出现此问题是因…

【设计模式】第14节:结构型模式之“代理模式”

一、简介 代理模式&#xff08;Proxy Design Pattern&#xff09;在不改变原始类&#xff08;或叫被代理类&#xff09;代码的情况下&#xff0c;通过引入代理类来给原始类附加功能。 二、优点 关注点分离访问控制延迟实例化远程访问缓存增加附加功能 三、应用场景 访问控…

【2021集创赛】海云捷迅杯一等奖:基于稀疏卷积与层融合的流水线优化方案

海云捷迅杯:基于FPGA C5Soc的MobileNetV1 SSD目标检测方案设计 本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 **杯赛题目&#xff1a;**海云捷迅杯——基于FPGA C5Soc的MobileNetV1 SSD目标检测方案设计 设计任务&#xff1a; 基于已训…

STM32G030F6P6 芯片实验 (一)

STM32G030F6P6 芯片实验 (一) 淘宝搞了几片, 没试过 G系列, 试试感觉. 先搞片小系统版: 套 STM32F103C8T6小系统板格式. 原理图: (1) Ref 有点跳, 从 STM32F103C8T6 系统板改的, 没重编号. (2) Type-C 纯给电, 砍了 16pin的, 直接换 6pin的。 (3) 测试LED放 B2。 (4) 测试底…

Android 10.0 framework关于systemUI状态栏透明背景的功能实现

1.概述 在10.0的系统产品定制化开发中,在对于系统原生SystemUI的状态栏背景在沉浸式状态栏的 情况下默认是会随着背景颜色的变化而改变的,在一些特定背景下状态栏的背景也是会改变的,所以由于产品开发需要 要求需要设置状态栏背景为透明的,所以就需要在Activity创建的时候…

仿真翻页企业内刊制作方法

现如今很多企业都会把自身的企业文化做成电子内刊形式&#xff0c;不再停留于传统纸质的形式&#xff0c;而这种电子版的书更容易被翻阅和传播。特别是员工可以随时随地来阅读企业的文化价值和发展趋向&#xff0c;进而创造出更多的经济效益。不得不说&#xff0c;一本企业文化…

Mysql数据库 4.SQL语言 DQL数据查询语言 查询

DQL数据查询语言 从数据表中提取满足特定条件的记录 1.单表查询 2.多表查询 查询基础语法 select 关键字后指定要查询到的记录的哪些列 语法&#xff1a;select 列名&#xff08;字段名&#xff09;/某几列/全部列 from 表名 [具体条件]&#xff1b; select colnumName…

大数据前置学习基础准备(非常详细!)

1.需要的环境 需要3台服务器&#xff0c;centos7 为集群&#xff0c;全部设置为nat模式 2.整个环境大体 1.设置三台Linux虚拟机的主机和固定ip 2.在Linux系统以及本机系统中配置了主机名映射 3.配置了三台服务器之间root用户的ssh免密互通 4.安装配置JDK环境 5.关闭防火墙和SEL…

【Linux】进程概念(下)

进程概念 一、环境变量1. 命令行参数2. 常见的环境变量&#xff08;1&#xff09;PATH&#xff08;2&#xff09;PWD&#xff08;3&#xff09;HOME&#xff08;4&#xff09;env 查看所有的环境变量 3. 获取环境变量&#xff08;1&#xff09;通过代码获取环境变量&#xff08…

应用开发平台集成工作流系列之17——流程建模功能前端设计与改造回顾

背景 对于流程设置不友好的问题&#xff0c;国内钉钉另行设计与实现了一套流程建模模式&#xff0c;跟bpmn规范无关&#xff0c;有人仿照实现了下&#xff0c;并做了开源&#xff08;https://github.com/StavinLi/Workflow-Vue3&#xff09;&#xff0c;效果图如下&#xff1a…

HiQPdf Library for .NET - HTML to PDF Crack

HiQPdf Library for .NET - HTML 到 PDF 转换器 .NET Core&#xff0c;用于 .NET 的 HiQPdf HTML 到 PDF 转换器 &#xff1a;HiQPdf HTML to PDF Library for .NET C# 和 HTML to PDF .NET Core 为您提供了一个现代、快速、灵活且强大的工具&#xff0c;只需几行代码即可创建复…