openssl编译成静态库被程序所依赖

IOS编译openssl,生成静态库 参考:https://www.jianshu.com/p/27c3393054da 简要说明 项目要求:Obj-C写的UI,调用由C++写的Framework库。需要在C++库中使用并集成openssl库功能。但是为了测试方便,新建了一个Mac的命令行项目。 集成步骤:获取openssl源码。编译openssl源码,生成两种架构的静态库,x86_64用于虚拟机,arm用于iPhones。合并... 阅读详情

一、问题

openssl库是一个安全库,包含摘要、加密等算法的实现,许多程序都会依赖它,但是当程序迁移时(编译和运行环境不一样时),就会报出类似的错误:error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory,这是一个很恶心的问题。

二、解决办法

解决办法有很多,将openssl库编译成静态库被程序所依赖就是一种方法,这样程序链接时会从静态库中找到要依赖的openssl。

三、操作

3.1 源码下载、解压

下载openssl源码,官网:https://www.openssl.org/  ; 下载地址:https://www.openssl.org/source/

下载自己需要的版本,一般来说下载最新的稳定版,更加安全。

解压 tar -zxvf openssl-1.1.0j.tar.gz

3.2 配置和编译

cd openssl-1.1.0j                               //切换目录

./config -fPIC no-shared   //配置静态编译

make                      //编译

ls *.a                    //查看生成的库文件,可以看到libssl.a和libcrypto.a两个库文件

3.3 打成bazel包

假设你的项目如下所示,在你的项目中的第三方库中创建如下openssl目录。其中libs下是刚刚编译生成的两个.a库文件,openssl-1.1.0j/include/openssl目录拷贝到third_part/openssl/include/下。编写openssl的BUILD文件,编译BUILD即可生成bazel的包。

目录结构:

--myproject
  --mytest
    --ssl_test.h
    --ssl_test.cc
    --BUILD
  --third_part
    --openssl
      --include
        --openssl
      --libs
        --libssl.a
        --libcrypto.a
      --BUILD

openssl/BUILD:

licenses(["notice"])

package(default_visibility = ["//visibility:public"])

cc_library(
    name = "libssl",
    srcs = [
        "libs/libcrypto.a",
        "libs/libssl.a",
    ],
    hdrs = glob([
        "include/**/*.h",
        "include/**/*.hpp",
    ]),
    includes = [
        "include",
    ],
)

 

四、使用openssl静态库(bazel包)

如上面的目录结构,mytest是使用openssl库的一个示例程序。在BUILD中明确依赖静态openssl后,就可在源文件中使用

#include <openssl/***.h>来使用openssl。例子是MD5

ssl_test.h

#ifndef WEBSEARCH_SSL_TEST_H
#define WEBSEARCH_SSL_TEST_H

#include <string>

class SslTest {
 public:
  std::string get_md5(std::string &str);
};

#endif //WEBSEARCH_SSL_TEST_H

ssl_test.cc

#include "ssl_test.h"
#include <openssl/md5.h>
#include <iostream>

std::string SslTest::get_md5(std::string &str) {
  unsigned  char mdStr[33]={0};
  MD5((const unsigned char *)str.c_str(),str.length(),mdStr);

  std::string restr((const char * )mdStr);
  return restr;
}

int main(){
  std::cout<<"helloworld!"<<std::endl;
  SslTest ssl;
  std::string str="helloworld!";
  std::string md5str = ssl.get_md5(str);
  std::cout<<md5str<<std::endl;
  return 0;
}

mytest/BUILD

cc_library(
    name = "ssl_test",
    srcs = ["ssl_test.cc"],
    hdrs = ["ssl_test.h"],
    deps = ["//third_party/openssl:libssl"],   //依赖静态openssl库
)

cc_binary(
    name = "ssl_test_main",
    srcs = ["ssl_test.cc"],
    deps = [":ssl_test"],
)

参考:https://www.cnblogs.com/yczcc/p/7594322.html

交叉编译第三方库之 依赖openssl的cmake 编译 libcurl mosquitto 有些第三方开源库,在编译时需要引入依赖库libopenssl,本文简略讲述libcurl和mosquitto库的camke交叉编译过程 1.交叉编译openssl 下载:https://www.openssl.org/source/snapshot/ 放到ubuntu下进行解压,并进入, 设置交叉编译环境: source /opt/fslc-framebuffer/2.4.4/environment-setup-armv7at2hf-neon-fslc-linux- 阅读详情

相关推荐

Android在NDK层使用OpenSSL进行RSA加密

前言需求:需要在NDK层对一个Java层的字符串进行RSA加密,然后对加密的结果进行Base64返回到Java层方案:选择使用OpenSSL来实现。编译libssl.a和libcrypto.a静态库在github上找到了一个项目,可以直接将OpenSSL编译成Android可以使用的,项目地址为openssl_for_ios_and_android ( https://github.com/lee

魔都三帅 2870

OpenSSL静态库编译及使用(linux环境)

OpenSSL静态库编译及使用(linux环境)

H674199469的博客 5712

Ubuntu实操二:静态库与动态库文件的生成与使用

目录 Linux系统中函数库的类型 一、用gcc生成静态库和动态库 二、作业实操一 三、作业实操二 四、实验总结 五、参考资料 Linux系统中函数库的类型 函数库分为静态库和动态库。 静态库 在程序编译时会被连接到目标代码中,程序运行是则不需要静态库的存在。 动态库 在程序编译时不会被连接到目标代码中,而是程序运行时载入的。 两者区别:前者是编译连接的,后者是程序运行载入的。 一、用gcc生成静态库和动态库 1、由.o 文件创建静态库 (1). 创建一个目录 (2). he.

qq_47946816的博客 3940

Linux升级openssl、openssh

在项目中,我们经常会发现Linux系统中Open SSH、Open SSL存在高危漏洞,如OpenSSL“心脏出血”漏洞,利用该漏洞,黑客可以获取约30%的https开头网址的用户登录账号密码,其中包括购物、网银、社交、门户等类型的知名网站等。

驰兔的博客 1106

linux系统openssl的C++开发环境搭建

在Linux上进行OpenSSL的C++开发,你需要安装OpenSSL库并且在编译时链接该库。

N阶二进制的博客 2916

预编译OpenSSL静态库的快速集成

OpenSSL 是一个强大的、开源的密码学库,广泛用于互联网通信中执行各种安全操作。它提供了加密算法、密钥生成、数字签名以及传输层安全(TLS)协议的实现。OpenSSL 通常被用来保护网络数据传输,保证数据的机密性、完整性和真实性。由于其开源的特性,OpenSSL 被广泛应用在 IT 行业中,是建立安全通信不可或缺的工具。不仅安全专家和网络管理员依赖于它的服务,许多常见的软件和服务,如 Apache、OpenSSH 以及各种数据库系统,也在底层依赖 OpenSSL。

weixin_35755823的博客 1062

iOS开发 引入支付宝 缺少 #include <openssl/asn1.h>

在你的Xcode里的 Build Setting --> header search paths 里添加支付宝SDK(openssl的路径),格式:$(PROJECT_DIR)/文件夹路径, 可以直接选中openssl,右键Show in Finder,然后右键查看简介,赋值位置(也就是路径),就ok了, 记得不要包含openssl文件夹, 写上会找不到;

开发仔XG 3412

Windows源码编译OpenSSL生成静态库和动态库

摘要:本文介绍在Windows系统下使用Perl、Visual Studio 2019和NASM编译OpenSSL 3.5.0静态库的步骤。首先以管理员身份运行x86 Native Tools命令行工具,设置Perl和NASM的环境变量路径。然后进入OpenSSL源码目录,执行perl Configure命令配置编译选项,指定安装路径。接着使用nmake进行长时间编译,并通过nmake test测试编译结果,最后执行nmake install完成安装。整个过程涉及环境配置、源码编译和测试验证等关键步骤。

93Capricorns的博客 568

创建android中使用的openssl静态库

我的环境:ubuntu12.04, ndkr8  和 guardianproject-openssl-android-1a3c579  这个项目可以在网上找到http://download.youkuaiyun.com/detail/zhouyuqwert/3408214 是经过老外修改后的下载下来再经过自己修改为供NDK编译的openssl源码,自己的JNI程序放在myApp文件夹即可编译为

1万+

Windows下OpenSSL静态库编译与集成:从源码到链接配置全指南

在C/C++项目中集成加密功能时,静态链接与动态库的选择直接影响部署效率。静态库将加密算法代码直接编入可执行文件,避免目标机器缺失DLL、版本冲突等运行时问题,尤其适合内部工具与需要便携分发的场景。OpenSSL作为广泛使用的加密库,支持RSA、AES、SHA等算法,但其在Windows上的编译流程涉及Perl环境、NASM汇编器、MSVC命令行等复杂依赖,任一环节出错都会导致编译失败或链接报错。通过合理的configure参数与nmake流程,可以生成静态库并规避LNK2019、LNK2038等常见错误。

weixin_29323551的博客 319

Unity3d 编译发布到安卓平台时出现的问题集

环境搭建好了,android SDK也有了,但导出的时候提示Error building Player: Win32Exception: ApplicationName='java.exe'....... 国内好像没看到解决方法。在Unity3d的论坛里面看到一个解决方法,把C:\windows\system32\java.exe复制到C:\Windows\SysWOW64里面,我这里就解决

erictang01的专栏 1773

openssl怎么编译成动态库

Windows下编译OpenSSL动态库的方法: 1、安装ActivePerl 初始化的时候,需要使用perl 2、使用VS下的Visual Studio 20xx Command Prompt进入控制台模式 3、解压缩openssl的包,通过cd命令切换到openssl的目录 4、执行:perl configure VC-WIN32 5、执行:ms/do_ms 6、选择不同的编译结果 1) 执行...

我的博客 3016

3D视觉-激光三角测量法的概述和原理

激光三角法位移测量的原理是,用一束激光以某一角度聚焦在被测物体表面,然后从另一角度对物体表面上的激光光斑进行成像,物体表面激光照射点的位置高度不同,所接受散射或反射光线的角度也不同,用。激光三角测量法是一种通过图像采集系统采集被测物表面漫反射的激光轮廓,进而基于设备已知的相对位置通过算法处理,获得被测物表面的三维轮廓数据,进而还原目标物体三维空间信息的方法。采用激光三角原理和回波分析原理进行非接触位置、位移测量的精密传感器, 广泛应用于位置、位移 、厚度、半径、形状、振动、距离等几何量的工业测量。

qq_20660115的博客 3919

动静态库

在系统当中,库文件可以分为静态库文件和动态库文件,Linux系统中的静态库文件以.a结尾,动态库文件以.so结尾。我们以C语言程序为例,一个C语言程序要被编译器编译成可执行文件,需要经过预处理编译汇编链接四个步骤才能生成可执行文件,其中链接是在干什么呢?链接其实就是在和库文件进行链接。静态链接:链接静态库的方式叫做静态链接。静态链接是在编译时将将静态库拷贝一份到可执行文件中,生成的可执行文件包含了库中的所有代码,因此运行时不再需要外部的库文件;但是,通过静态链接形成的可执行程序比较大。

知其然 知其所以然 1324

java 二维码生成及其标签打印

本文主要内容 二维码生成 二维码标签预览及打印 二维码生成 笔者此次的二维码是通过调用第三方接口生成的,具体流程如下: 根据规范要求调用第三方接口,返回二维码下载地址及二维码图片的属性值(图片大小等) 根据返回的值获取二维码下载地址,根据地址下载二维码图片,保存至本地磁盘及记录数据信息 扫描二维码跳转相应地址,显示资产的基本信息 最终生成的二维码如下图所示: 预览并批量打印二维码标签 先...

孙小牟的博客 4941

保姆级教程:用Wokwi玩转ESP32 MicroPython仿真(含库文件配置指南)

本教程详细介绍了如何使用Wokwi平台进行ESP32 MicroPython仿真开发,包括库文件配置、传感器数据模拟和REPL调试技巧。通过Wokwi的仿真调试系统,开发者可以在浏览器中快速验证代码逻辑,提高开发效率,特别适合物联网项目的快速迭代。

weixin_29195615的博客 443

从openssl中剥离bn库编译成静态库

修改 include/openssl/err.h # define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) 修改 crypto/bn/bn_rand.c 这个函数调用了 SHA512 库,但这个函数并不常用,可以去掉 int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, const .

mengxp的博客 978

微博scheme

微博scheme

qq_42278595的博客 318

WindowsOpenSSL静态库下载仓库:简化网络安全开发流程

WindowsOpenSSL静态库下载仓库:简化网络安全开发流程 【下载地址】WindowsOpenSSL静态库下载仓库 本仓库提供Windows平台的OpenSSL静态库资源文件下载,专为开发者设计。OpenSSL作为广泛使用的开源安全软件库,支持多种加密算法,确保网络数据传输的安全性。通过本资源文件,开发者无需重新编...

gitblog_06724的博客 655

《C++等级认证CCF-GESP真题解析》专栏总目录

❤️ 专栏名称:《C++等级认证CCF-GESP真题解析》🌸 专栏介绍:中国计算机学会GESP《CCF编程能力等级认证》C++编程(1~8级)历届真题解析。🚀 订阅专栏:订阅后可阅读专栏内所有真题解析,真题持续更新中,欢迎订阅!

人生就是一个不断学习的过程 6287

【27】软考软件设计师——数据流图(DFD)补全题满分精讲|下午15分大题深度拆解

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第27篇,深度精讲**下午案例题第1道必考大题:数据流图(DFD)补全**,该题单题分值高达**12 ~ 15分**,是整张试卷最稳的保底得分大题。我结合多年备考复盘与真题阅卷规则,超详细拆解DFD四大核心元素标准定义、机考绘图规范、三层分层逻辑、**父图子图平衡刚性扣分规则**,升级强化版「DFD满分补全三步法」;复刻历年高频真题完整流程,拆解缺失数据流定位、实体/存储辨析、平衡改错、文字需求对照全流程,配套**阅卷满分答题话术、机考避坑细则

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 590

windows下libcurl+openssl静态库编译(32位和64位静态库-不同openssl版本)

关于windows下编译libcur相关的库的文章是一大把,但是支持ssl的相关文章相对少一些,能按照对应要求编译通过的更少,编译成静态库的更少!再就是更不用说同事支持win64位系统的了,如下为我们开发过程中实际编译通过的总结,一来希望后续使用人员能够看到,为广大网友做点实际的共享,二来作为备忘录,以备后续自己使用,以防忘记或丢失。 libcur一来zlib和openssl,zlib库编译很简...

lixiang987654321的专栏 1万+

使用OpenCV从低对比度图像中提取圆形轮廓

希望本文能帮助您从低对比度图像中提取圆形轮在本文中,我们将探讨如何使用OpenCV库从低对比度图像中提取圆形轮廓。低对比度图像通常指的是图像中的亮度差异很小,导致物体边缘不够清晰的情况。在本文中,我们将探讨如何使用OpenCV库从低对比度图像中提取圆形轮廓。低对比度图像通常指的是图像中的亮度差异很小,导致物体边缘不够清晰的情况。通过预处理图像并应用Hough变换,我们能够在低对比度图像中准确地提取圆形轮廓。通过预处理图像并应用Hough变换,我们能够在低对比度图像中准确地提取圆形轮廓。

ByteWhiz的博客 350

链接静态库的问题

链接静态库的问题    最近在整理前人写的模块代码,将几个不同功能的模块统一成一个接口,提供给别人使用。为了内部修改方便以及外面使用方便,在Wondows平台下,很自然的就想到将内部每个不同的功能模块编译成独立的若干静态库文件(lib),然后再将这几个静态库文件整合成一个动态库文件(dll)。    这样内部各个模块可以让不同的人来维护,修改后的模块在单独编译,最后再重新生成dll文件,外面使用者

BlueSoal的专栏 3902

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

windows下静态库编译问题(以libcurl编译为例)

1、curl编译成有ssl的静态库; 2、当一个程序既需要openssl,又需要curl的时候需要保证编译libcurl使用的openssl和此程序使用的openssl是同一个静态库,不然会出现一些难以预料的问题,调用openssl中的函数的时候不确定会调哪一个库里的,非常恶心。切记!!! 注意:编译libcurl时编译的选项(MT、MD等)必须要和要用的程序时一致的,不然会报错。 ...

gongxie0235的博客 522

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MUTT+OPENSSL+MSMTP 编译

  muttrc配置文件: gedit /usr/local/mutt/etc/muttrc msmtp配置文件:gedit /usr/local/msmtp/etc/msmtprc测msmtp: /usr/local/msmtp/bin/msmtp shelley_yuan@ovt.com测mutt和msmtp:echo "test"|/usr/local/mut

shelleyHUHU的专栏 3526
上一篇: 遇到过的问题
下一篇: flag - 命令行参数解析(go中的gflags)
whkdsb
博客等级 码龄12年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值