C++ 如何在Windows上静态链接到Qt中的libcUrl?
我已经试着按照我能在网上找到的所有指南去做了,我非常接近,但是被卡住了。项目构建并运行。然而,它立即崩溃。 我使用的是C++ 如何在Windows上静态链接到Qt中的libcUrl?,c++,windows,qt,curl,C++,Windows,Qt,Curl,我已经试着按照我能在网上找到的所有指南去做了,我非常接近,但是被卡住了。项目构建并运行。然而,它立即崩溃。 我使用的是qtcreator3.5.1和qt5.5.1,编译器是mingw4.9.2 32位 我从中下载的cUrl库是Win32 GenericWin32 7zip 7.45.0二进制SSL SSH Viktor Szakáts 我已经在.pro文件中添加了curl头的路径INCLUDEPATH+=C:\Lib\C\curl-7.45.0-win32-mingw\include 此外,我还
qtcreator3.5.1
和qt5.5.1
,编译器是mingw4.9.2 32位
我从中下载的cUrl库是Win32 GenericWin32 7zip 7.45.0二进制SSL SSH Viktor Szakáts
我已经在.pro文件中添加了curl头的路径INCLUDEPATH+=C:\Lib\C\curl-7.45.0-win32-mingw\include
此外,我还右键单击了该项目,单击了“添加库”,选择了“系统库”,仅选择了Windows并设置为静态链接,并添加了libcurl.a
和libcurldll.a
,它们都位于编译器的lib目录C:\Qt\Tools\mingw492\u 32\lib
。此步骤将win32:LIBS+=-lcurl
和win32:LIBS+=-lcurldll
添加到.pro文件中
main.cpp:
#include "mainwindow.h"
#include <QApplication>
#include <curl/curl.h>
int main(int argc, char *argv[]) {
CURLcode result = curl_global_init(CURL_GLOBAL_WIN32);
QApplication a(argc, argv);
MainWindow w;
w.show();
auto retVal = a.exec();
curl_global_cleanup();
return retVal;
}
#包括“mainwindow.h”
#包括
#包括
int main(int argc,char*argv[]){
CURLcode result=curl\u global\u init(curl\u global\u WIN32);
质量保证申请a(argc、argv);
主窗口w;
w、 show();
自动检索=a.exec();
curl_global_cleanup();
返回返回;
}
坠机的原因是什么
注意:在任何代码中都没有cUrl的其他用途(它只是一个简单的应用程序)。下载cUrl for Windows(64位): 或者,对于32位: 首先,您必须将curl中的文件夹放入qt中的文件夹 这些是: “包括”, “lib”, “垃圾桶” 进入(我使用版本5.14.2和64位) F:/Qt/5.14.2/mingw73_64/lib,F:/Qt/5.14.2/mingw73_64/include, F:/Qt/5.14.2/mingw73_64/bin 然后从项目中转到.pro文件并添加以下行:
LIBS += -LF:/Qt/5.14.2/mingw73_64/lib -lcurl
注意-您必须选择QT安装的lib目录的路径
现在,您可以使用以下代码进行测试:
...
#include <curl/curl.h>
...
size_t WriteCallback(char *contents, size_t size, size_t nmemb, void *userp)
{
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
...
CURL* easyhandle = curl_easy_init();
std::string readBuffer;
curl_easy_setopt(easyhandle, CURLOPT_URL, "https://example.com");
curl_easy_setopt(easyhandle, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, &readBuffer);
curl_easy_perform(easyhandle);
...
。。。
#包括
...
大小写回(char*contents、大小、大小nmemb、void*userp)
{
((std::string*)userp)->追加((char*)内容,大小*nmemb);
返回大小*nmemb;
}
...
CURL*easyhandle=CURL_easy_init();
字符串读取缓冲区;
curl\u easy\u setopt(易于处理,CURLOPT\u URL,“https://example.com");
curl\u easy\u setopt(易处理,CURLOPT\u SSL\u验证对等,false);
curl_easy_setopt(易于处理、CURLOPT_WRITEFUNCTION、WriteCallback);
curl_easy_setopt(易于处理、CURLOPT_WRITEDATA和readBuffer);
卷曲,易于操作;
...
这里您可以从curl请求(example.com)获得http响应。
libcurldll.a
将二进制文件链接到共享库(WIndows上的DLL)。如果需要静态链接,只需使用libcurl.a
。我只是好奇,但是既然Qt提供了执行HTTP请求所需的所有类,为什么不直接使用这些类来避免麻烦呢?@JanHenke我已经从.pro文件和编译器的lib文件夹中删除了它。现在我得到了init和cleanup函数的未定义引用错误。@SirDarius,因为我已经用cUrl编写了一个相当大的应用程序,我只是想把它包装到Windows的UI中。我对卷发已经很适应了。公平地说,我也经常使用卷发。