超级小白记录一下初次在ubuntu使用openssl库

本文记录了一位超级小白在Ubuntu上初次使用openssl库遇到的问题及解决过程。在源码安装或apt-get install openssl后,无法直接用于编程,通过安装libssl-dev解决了问题。最终通过gcc编译器添加-lssl -lcrypto选项成功编译并运行了一个MD5的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人是刚接触这些东西的超级小白,初次在ubuntu上使用openssl库想写些代码却遇到很多问题。应该是本人基础太差了,好不容易才解决这些问题。

现把遇到的问题记录如下,可能对自己今后还会有帮助。

在ubuntu上wget源码安装openssl后发现并不能使用openssl的库编写程序,

然后发现wget源码安装或者apt-get install openssl 安装只是安装运行库。

解决办法是再apt-get install libssl-dev。

然后在网上找了个做md5的代码如下:(使用 vi 编辑该文件为md5test.c )

#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
#include <openssl/md5.h>  
  
int main(int argc, char** argv) {  
    MD5_CTX hash_ctx;  
    char input_string[128];  
    unsigned char hash_ret[16];  
    int i;  
  
    // check usage  
    if (argc != 2) {  
        fprintf(stderr, "%s <input string>\n", argv[0]);  
        exit(-1);  
    }  
  
    // set the input string,这里有个换行的文件,如果加上换行给变量,值就不对了  
    snprintf(input_string, sizeof(input_string), "%s", argv[1]);  
  
    // initialize a hash context  
    MD5_Init(&hash_ctx);  
  
    // update the
<think>我们正在处理一个关于在Ubuntu 18.04上为Qt配置和编译OpenSSL的问题。根据引用内容,我们知道需要交叉编译OpenSSL以使Qt支持HTTPS。但是,用户没有提到交叉编译,所以我们可以假设用户可能是在Ubuntu 18.04上为x86_64架构编译,或者需要明确用户的目标平台。然而,引用中提到了交叉编译链aarch64-none-linux-gnu-gcc,所以用户可能是为了嵌入式目标(如ARM)编译。但用户的问题中没有明确说明,因此我们需要考虑两种情况:本地编译(x86_64)和交叉编译(如ARM)。 不过,从用户的问题描述“在Ubuntu 18.04上使用Qt配置和编译OpenSSL”来看,并没有明确指定目标架构。因此,为了安全起见,我们可以先提供本地编译(即编译出在Ubuntu 18.04上运行的Qt程序所需的OpenSSL)的步骤,然后如果需要交叉编译,再补充交叉编译的步骤。 但是,参考引用[1]和[2]的内容,它们都涉及到了交叉编译(一个是aarch64,另一个是Android)。因此,我们可能需要询问用户目标平台。然而,用户的问题中并没有明确,所以我们先按照本地编译(x86_64)来提供步骤,因为这是最常见的情况。如果用户需要交叉编译,我们可以再根据具体情况提供。 同时,注意引用[1]中提到了Qt5.12.8和openssl1.1.1g,引用[2]提到了OpenSSL的编译步骤(但针对的是Android)。我们将结合这些信息。 步骤概述: 1. 安装必要的依赖 2. 下载OpenSSL源码 3. 配置和编译OpenSSL(注意:如果是交叉编译,则配置不同) 4. 将编译好的OpenSSL配置到Qt中 由于用户没有说明是交叉编译,我们先按本地编译处理。 具体步骤: ### 1. 安装依赖 在Ubuntu 18.04上,首先安装编译OpenSSL所需的工具和依赖: ```bash sudo apt update sudo apt install build-essential checkinstall zlib1g-dev -y ``` ### 2. 下载OpenSSL源码 这里我们使用OpenSSL 1.1.1g(因为引用[1]中使用了这个版本,且它是一个长期支持版本)。你可以从OpenSSL官网下载,也可以使用wget。 ```bash wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz tar -xf openssl-1.1.1g.tar.gz cd openssl-1.1.1g ``` ### 3. 配置和编译OpenSSL 对于本地编译(x86_64): ```bash ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib make sudo make install ``` 注意:`--prefix`指定安装目录,这里我们安装到`/usr/local/ssl`。`shared`表示生成共享(.so文件),`zlib`表示启用zlib压缩支持。 ### 4. 配置环境变量 为了让Qt能够找到OpenSSL,我们需要将OpenSSL路径添加到系统路径中: ```bash echo "/usr/local/ssl/lib" | sudo tee /etc/ld.so.conf.d/openssl-1.1.1g.conf sudo ldconfig ``` ### 5. 验证OpenSSL安装 ```bash openssl version ``` 如果显示OpenSSL 1.1.1g,则安装成功。 ### 6. 配置Qt使用OpenSSL 在Qt中,你可以在项目文件(.pro)中添加OpenSSL的链接。例如: ```qmake LIBS += -L/usr/local/ssl/lib -lssl -lcrypto INCLUDEPATH += /usr/local/ssl/include ``` 另外,如果Qt本身在编译时没有启用OpenSSL,那么即使你链接了,可能也无法使用Qt的SSL模块(如QSslSocket)。因此,确保你的Qt版本是支持SSL的。你可以通过运行`qtbase/src/network/configure`来检查Qt的配置(但通常预编译的Qt版本已经支持SSL)。 ### 交叉编译的情况 如果用户需要交叉编译(例如,目标平台是ARM),则步骤不同。主要区别在于配置OpenSSL时需要指定交叉编译工具链。例如,对于aarch64(ARM64)架构,使用交叉编译链`aarch64-none-linux-gnu-gcc`,则配置步骤为: ```bash ./Configure linux-aarch64 \ --prefix=/path/to/install \ --cross-compile-prefix=aarch64-none-linux-gnu- \ shared zlib make make install ``` 然后将编译好的复制到目标板或Qt的交叉编译环境中。 ### 在Qt中启用OpenSSL支持 在编译Qt时,需要指定OpenSSL的路径。例如,在配置Qt时,可以添加: ```bash ./configure -openssl -I /path/to/openssl/include -L /path/to/openssl/lib ... ``` ### 注意事项 - 确保OpenSSL版本与Qt版本兼容。Qt5.12支持OpenSSL 1.1.x。 - 如果Qt是交叉编译的,那么OpenSSL也必须使用相同的工具链交叉编译。 由于用户的问题中没有明确是本地编译还是交叉编译,我们提供了本地编译的详细步骤,并简要说明了交叉编译的不同之处。如果用户需要交叉编译,请提供目标架构和交叉编译工具链信息。 ### 相关问题 1. 如何验证Qt是否支持OpenSSL? 2. 在Qt程序中使用HTTPS需要哪些步骤? 3. 如何交叉编译Qt以支持特定的硬件平台?</think>### Ubuntu 18.04 配置 OpenSSL 使 Qt 支持 HTTPS 教程 #### 一、环境准备 1. **系统要求** Ubuntu 18.04 LTS(建议更新至最新补丁) ```bash sudo apt update && sudo apt upgrade -y ``` 2. **安装基础依赖** ```bash sudo apt install build-essential libssl-dev perl python git \ libxcb-xinerama0-dev libgl1-mesa-dev libglu1-mesa-dev -y ``` 3. **下载资源** - OpenSSL 1.1.1g(兼容 Qt 5.12.8): ```bash wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz tar -xvf openssl-1.1.1g.tar.gz ``` - Qt 5.12.8 源码(可选,若需重编译 Qt): [Qt 5.12.8 源码下载](https://download.qt.io/official_releases/qt/5.12/5.12.8/single/) --- #### 二、编译 OpenSSL 1. **配置编译参数** ```bash cd openssl-1.1.1g ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib ``` - `shared`:生成动态链接(`.so` 文件) - `zlib`:启用压缩支持 - `--prefix`:指定安装路径(默认可访问) 2. **编译并安装** ```bash make -j$(nproc) # 使用所有CPU核心加速编译 sudo make install ``` 3. **验证安装** ```bash /usr/local/ssl/bin/openssl version # 应输出:OpenSSL 1.1.1g 21 Apr 2020 ``` --- #### 三、配置 Qt 使用 OpenSSL 1. **设置环境变量** 在 `~/.bashrc` 末尾添加: ```bash export OPENSSL_ROOT_DIR=/usr/local/ssl export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib ``` 生效配置: ```bash source ~/.bashrc ``` 2. **验证 Qt 的 SSL 支持** 创建测试程序: ```cpp #include <QSslSocket> #include <QDebug> int main() { qDebug() << "SSL支持:" << QSslSocket::supportsSsl(); qDebug() << "SSL版本:" << QSslSocket::sslLibraryVersionString(); return 0; } ``` **预期输出**: ``` SSL支持: true SSL版本: "OpenSSL 1.1.1g 21 Apr 2020" ``` 3. **项目配置(.pro 文件)** ```qmake LIBS += -L/usr/local/ssl/lib -lssl -lcrypto INCLUDEPATH += /usr/local/ssl/include ``` --- #### 四、故障排除 1. **Qt 报错 "TLS initialization failed"** ```bash sudo cp /usr/local/ssl/lib/libssl.so.1.1 /path/to/Qt/installation/5.12.8/gcc_64/lib/ sudo cp /usr/local/ssl/lib/libcrypto.so.1.1 /path/to/Qt/installation/5.12.8/gcc_64/lib/ ``` 2. **版本冲突** 若系统预装 OpenSSL: ```bash sudo update-alternatives --config openssl # 选择 /usr/local/ssl/bin/openssl ``` --- #### 五、完整编译 Qt(可选) 若需重新编译 Qt 以静态链接 OpenSSL: ```bash cd qt-everywhere-src-5.12.8 ./configure -openssl -I /usr/local/ssl/include -L /usr/local/ssl/lib make -j$(nproc) sudo make install ``` > **关键参考**:交叉编译时需同步目标平台的 OpenSSL ,详见嵌入式 Qt 开发指南[^1][^3]。 --- ### 相关问题 1. **如何验证 Qt 程序是否正常使用 HTTPS 连接?** 2. **在 ARM 平台上交叉编译 OpenSSL 与 Qt 有哪些特殊步骤?** 3. **如何解决 Qt 网络请求中的证书验证错误?** 4. **OpenSSL 1.1.x 与 Qt 5.15 的兼容性有哪些注意事项?** [^1]: 交叉编译 Qt 需同步目标平台的 OpenSSL [^2]: Android 平台需复制 `.so` 文件到 QtSDK/lib [^3]: 嵌入式开发需严格匹配工具链版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值