使用OpenSSL(Windows)的Qt中出现编译错误LNK2019
Compilation error LNK2019 in Qt with OpenSSL (Windows)
我正试图用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文件的配置被忽略,对项目没有任何影响。
谢谢!
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?