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

news2024/12/25 9:27:11

文章目录

  • 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 编译指令及提示

// 找不到protobuf

g++ *.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.coloradmin.cn/o/1148832.html

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

相关文章

hadoop权威指南第四版

第一部分 HaDOOP基础知识 1.1 面临的问题 存储越来越大,读写跟不上。 并行读多个磁盘。 问题1 磁盘损坏 – 备份数据HDFS 问题2 读取多个磁盘用于分析,数据容易出错 --MR 编程模型 1.2 衍生品 1 在线访问的组件是hbase 。一种使用hdfs底层存储的模型。…

Spring中Bean的完整生命周期!(Bean实例化的流程,Spring后处理器,循环依赖解释及解决方法)附案例演示

Bean实例化的基本流程 加载xml配置文件&#xff0c;解析获取配置中的每个的信息&#xff0c;封装成一个个的BeanDefinition对象将BeanDefinition存储在一个名为beanDefinitionMap的Map<String,BeanDefinition>中ApplicationContext底层遍历beanDefinitionMap&#xff0c…

寻找倒数第K个节点

这篇文章也是凑数的 ... 寻找倒数第K个节点 描述 : 找出单向链表中倒数第 k 个节点。返回该节点的值。 题目 : LeetCode 返回倒数第K个节点 : 面试题 02.02. 返回倒数第 k 个节点 说明 : 给定的 k 保证是有效的。 分析 : 我们给出个例子 : 首先&#xff0c;我们创建两个…

Java-API简析_java.io.FilterOutputStream类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/134106510 出自【进步*于辰的博客】 因为我发现目前&#xff0c;我对Java-API的学习意识比较薄弱…

ubuntu安装tinycudann

tinycudann几乎是nerf开发环境必备的条件之一。在测试sdfstudio和nerfstudio都需要安装tinycudann。按照官方的操作步骤&#xff0c;最简单的安装步骤为&#xff1a; pip install githttps://github.com/NVlabs/tiny-cuda-nn/#subdirectorybindings/torch常见会出现如下两个问…

requests之post请求实例-百度翻译

视频版教程&#xff1a;一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 打开百度翻译网址&#xff0c;我们输入需要翻译的英文&#xff0c;谷歌 F12 打开开发者工具&#xff0c;network可以看到网络请求&#xff0c;我们需要找到请求的API&#xff0c;…

Git 提交时提示 GPG 签名错误

本来应该一切都是正常的&#xff0c;但今天提交的时候提示 GPG 签名错误。 错误的信息就是 GPG 签名失败。 gpg: skipped "942395299055675C": No secret key gpg: signing failed: No secret key error: gpg failed to sign the data fatal: failed to write commi…

PicGo+雨云ROS搭建自己的图床,可配合Typora使用

本文将手把手带你使用 PicGo雨云对象存储ROS(Rain Object Storage) 搭建自己专属的免费图床&#xff0c;并且可以配合Typora使用。 雨云对象存储服务介绍和使用教程&#xff1a;https://blog.zeruns.tech/archives/733.html 目前雨云对象存储是公测阶段&#xff0c;暂时是免费…

NeurIPS 2023 | 连接多模态对比表征:无需配对数据的高效对比表征学习方法

©PaperWeekly 原创 作者 | 王泽寒 单位 | 浙江大学 研究方向 | 多模态学习 论文地址&#xff1a; https://arxiv.org/abs/2305.14381 项目主页&#xff1a; https://c-mcr.github.io/C-MCR/ 模型&代码地址&#xff1a; https://github.com/MCR-PEFT/C-MCR 多模态对比表…

IconWorkshop中文官方版下载_IconWorkshop最新版下载v6.91汉化破解版下载

IconWorkshop 6.91是由Axialis公司出品的一款专业图标创作工具。它能够为所有版本的Windows&#xff0c;MacOS&#xff0c;iOS和Linux制作您自己的专业图标。兼容Visual Studio&#xff0c;Photoshop和Illustrator等开发行业标准。软件内置了不少滤镜&#xff08;模糊、平滑、锐…

CTFHub | MySQL流量、Redis流量、MongoDB流量的WriteUp

文章目录 MySQL流量题目题解 Redis流量题目题解 MongoDB流量题目题解 数据库类流量题需要用到Wireshark截取数据包&#xff0c;然后进行分析。 WireShark是非常流行的网络封包分析工具&#xff0c;可以截取各种网络数据包&#xff0c;并显示数据包详细信息。常用于开发测试过程…

算法刷题记录6 - 反转链表和链表两两交换

哎&#xff0c;都两周没刷题了&#xff0c;罪过 第一题 2023.10.29 周日 上链接 206. 反转链表 难度&#xff1a;简单 代码随想录 文档 代码随想录 视频 这道题说难不难&#xff0c;但是也不知道是太久没写没感觉了还是确实细节多&#xff0c;不看视频确实感觉不出写的问题在…

GEE错误——影像加载过程中出现的图层无法展示的解决方案

问题&#xff1a; // I dont know if some standard value exists for the radius, in the same, I will assume that some software would prefer to use square shape, but circle makes more sense to me. // pixels is noice if you want to zoom in and out to visualize…

Redis实现分布式锁之----超时和失效(非原子性)问题----解决方案

Redis实现分布式锁之----超时和失效&#xff08;非原子性&#xff09;问题----解决方案 超时和失效&#xff08;非原子性&#xff09;问题 原子性问题&#xff1a;上锁时存入线程名称&#xff0c;删除时要先判断锁内的名称是不是自己的&#xff0c;是再删除&#xff0c;但是后…

软件测试---边界值分析(功能测试)

选取正好等于、刚好大于、刚好小于边界的值作为测试数据 上点: 边界上的点 (正好等于)&#xff1b;必选(不考虑区开闭) 内点: 范围内的点 (区间范围内的数据)&#xff1b;必选(建议选择中间范围) 离点: 距离上点最近的点 (刚好大于、刚好小于)&#xff1b;开内闭外(考虑开…

常见面试题-MySQL专栏(二)

了解索引扫描吗&#xff1f; 答&#xff1a; MySQL有两种方法生成有序结果&#xff1a; 通过排序操作按照索引顺序扫描 如果 explain 出来的 type 列值为 “index” 的话&#xff0c;说明是按照索引扫描了。 索引扫描本身的速度是很快的。但是如果索引不能覆盖查询所需的全…

【每日一题】H 指数 II

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;二分查找 写在最后 Tag 【二分查找】【数组】【2023-10-30】 题目来源 275. H 指数 II 题目解读 本题与 274. H 指数 题目一致&#xff0c;只是加强了一下条件&#xff0c;数组是有序的。 解题思路 方法一&#xff…

【Docker】如何查看之前docker run命令启动的参数

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

如何高效制作视频滚动字幕:批量剪辑攻略

在视频制作过程中&#xff0c;添加滚动字幕是常见且重要的环节。它不仅可以帮助传达信息&#xff0c;还能增强视频的观感体验。然而&#xff0c;对于需要大量制作字幕的视频&#xff0c;逐一添加字幕无疑会浪费大量时间和精力。因此&#xff0c;本文将为你介绍运用云炫AI智剪制…

1.让数组动起来

概述 对数组进行分析&#xff0c;目标如下 线性表的概念数组的存储结构数组查询&#xff0c;插入&#xff0c;删除操作的特点及对应的时间复杂度刷题(盛最多水的容器) 线性表 在数据结构中&#xff0c;数据的逻辑结构分为线性结构和非线性结构 线性结构: n个数据元素有序集合…