使用OpenSSL(Windows)的Qt中出现编译错误LNK2019

Compilation error LNK2019 in Qt with OpenSSL (Windows)

本文关键字:编译 错误 LNK2019 Qt OpenSSL Windows 使用      更新时间:2023-10-16

我正试图用OpenSSL在Qt中编译一个非常简单的项目,但它总是显示一个链接器错误,但当我在Visual C++2010中编译时,效果很好。

代码:

#include <opensslsha.h>
int main(int argc, char *argv[]){
    unsigned char in[] = "Hola";
    unsigned char out[33] = {0};
    SHA256(in,4,out);
    return 0;
}

错误:

main.obj:-1: error: LNK2019: símbolo externo _SHA256 sin resolver al que se hace referencia en la función _main

我已安装:

  • 适用于Windows 32位(VS 2010,505 MB)的问题5.1.1
  • 来自二进制文件的OpenSSL-Win32(Win32 OpenSSL v1.0.1e,16MB)
  • Microsoft Visual C++2010(学习版)

来自Qt的.pr文件是:

#-------------------------------------------------
#
# Project created by QtCreator 2013-11-29T23:21:36
#
#-------------------------------------------------
QT       += core
QT       -= gui
TARGET = prueba_openssl
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += C:/OpenSSL-Win32/include
LIBS += -L"C:/OpenSSL-Win32/lib" -llibeay32

有什么建议吗?

谢谢!

未定义的引用表示未链接或未找到库,或者库是链接器但未找到函数。

在您的案例中,它正在寻找_SHA256,这意味着函数未经修饰,并且正在使用C.

您似乎忘记使用extern "C"。如下声明所需的函数:

extern "C"  unsigned char *SHA256(const unsigned char *d, size_t n,unsigned char *md);

或者将extern "C"放在C++宏下。我希望这能解决你的目的。

使用extern "C"并不能解决问题。

我在附加参数中找到了一个解决方案:"LIBS+=-LC:/OpenSSL-Win32/lib-libbey32"INCLUDE+=C:/OpenSSL-Win32/INCLUDE"LIBPATH+=C:/OpenSSL-Win32/lib"。(来自活动项目的构建步骤)。

由于某些原因,.pro文件的配置被忽略,对项目没有任何影响。

谢谢!