Linux 编译安装 openssl库
Linux 编译安装 openssl库
如果是不需要特定版本的openssl库的安装非常简单。直接sudo apt install opensll
即可。而且像Ubuntu这种应该是自带了openssl库的。运行openssl version -a
查看版本。
当这个默认版本不满足我们的使用要求时,我们需要自己编译安装需要的版本。方法如下。
1、下载openssl源码
这里我需要下载的版本是openssl-1.0.0c
。把下载压缩包放到一个你能找得到的路径下,然后进行解压。
2、编译安装
-
config配置
配置编译参数。这里的一些参数说明可以在github的openssl上找到。
参数列得很全,但是使用说明并不太详细。建议直接百度搜。github上的虽然不详细,但是都是对的,百度搜出来的一些参数使用是错误的。这里我只编译Linux共享库,所以只加了一个
shared
参数。安装路径为默认的/usr/local/ssl
,不进行设置。我使用的是wsl进行编译的。(后面我还会用交叉工具链进行再次编译,这个使用wsl不再那么好使了,貌似是因为wsl不支持32位程序。然后网上也有解决方法,简单尝试后仍然没办法编译。后面转虚拟机了)
$ ./config shared
出现Configure for linux-x86_64
应该就是配置成功了。
-
make编译
配置好编译选项后,运行make,一直等着就好了。应该是没有什么问题的。
$ make
-
make test测试
make编译成功后,可以进行make test。我这里测试存在两个错误,查资料说是bug,然后就没管了。
-
make install安装
这里需要用root权限,加sudo进行安装。否则会报错。
# sudo make install
运行仍然存在错误。搜了一下,删除一个相关文件就好了。
# sudo mv /usr/bin/pod2man /usr/bin/pod2man_cp
安装完成。这里还没有把库加到系统默认路径下,所以gcc 是没有办法直接使用的。如果要使用的话,通过-L来指定库libssl.so.1.0.0和libcrypto.so.1.0.0的路径。
3、创建软链接
下图打错了两个单词:opensll。修改为openssl。
此时版本已经切换成我们自己编译安装的版本了。如果要切回去的话,将/usr/bin/openssl_cp
备份恢复即可。
4、gcc使用openssl库
# sudo vim /etc/ld.so.conf
将/usr/local/openssl/lib
加到最后面的新行。然后执行
# sudo ldconfig
这时在链接选项后添加LDFLAGS = -lssl -lcrypto
即可将openssl库链接进来。
5、交叉编译openssl
openssl支持交叉编译配置。在github的教程中有讲到如何使用--cross-compile-prefix=
。
我是通过在虚拟机ubuntu18.04上进行交叉编译的。工具链是arm-himix100-linux。
由于是交叉编译,所以需要设置交叉编译配置项,并且不要安装在默认位置了。
先clean一下,不然要报错。
$ make clean
$ ./config no-asm shared --prefix=/home/river/Project/IPC/cross_compiling --cross-compile-prefix=arm-himix100-linux-
$ make
$ sed -i "s/-m64//g" Makefile
$ make
# sudo make install
过程中会报一个关于-m64
的错误。直接删除Makefile中的-m64
。
no-asm: 不使用汇编代码。
–prefix: 为openssl安装路径。
编译安装成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗