c++ - libCurl 和 OpenSSL 的奇怪之处

标签 c++ curl openssl mingw libcurl

又是我。我只是不明白,为什么会这样!

我下载了 OpenSSL 的编译静态库,from here ,此链接位于下载页面的官方 cUrl 站点上。我下载了 Zlib 并编译了它们,然后我用

编译了 libcurl
mingw32-make mingw32-ssl-zlib

我将所有 makefile.m32 路径更改为 Zlib 和 OpenSSL 文件。一切顺利,我收到了 libcurl.a 和 libcurldll.a。我将 libcurl.a 和 libeay32.a、libssleay32.a 和 libz.a 添加到我的项目的 lib 文件夹中。 我建立了项目 - 它说一切都很好。我跑了 - 它刚刚终止。我正在使用 MinGW 和 Eclipse。

它是这样编译的:

g++ -DCURL_STATICLIB -O0 -g3 -Wall -c -fmessage-length=0 -osrc\main.o ..\src\main.cpp

g++ -L..\lib -oYTUploader.exe src\main.o -lcurl -lws2_32 -lwldap32 -leay32 -lssleay32 -lz

我运行 DependencyWalker,它说缺少 ieshims.dll、libeay32.dll 和 ssleay32.dll。但为什么?为什么要 OpenSSL dll,我正在使用静态链接!我用 OpenSSL 的静态库构建了静态 libCurl 库。关于 ieshims.dll 我也不明白为什么需要它! 求助,我不知道出了什么问题!我按照说明编译了cUrl,一切都应该没问题..

最佳答案

您链接的 openssl-libs 似乎是导入库。这意味着它们只包含您的代码调用函数所需的信息,然后从 dll 中加载和调用相应的函数。

所以问题是:虽然您链接到静态库,但库随后会加载并使用动态 dll。它们不是“真正的”静态库。

一个解决方案是获取其他库(或自己编译它们),或者更简单:您只需将 dll 复制到您的 .exe 所在的目录中,您应该没问题。

关于c++ - libCurl 和 OpenSSL 的奇怪之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013708/

相关文章:

linux - 使用 cookie 从网站获取结果

java - 在 Java 中验证 Open SSL SHA1 哈希值

ssl - 如何使用 OpenSSL 生成带有 SubjectAltName 的自签名证书?

php - 为什么 curl 说所有带有 http 的网站都可用?

http - 将工作的curl请求转换为HTTP

C++:将 WCHAR 转换为 LPCWSTR - 实际工作示例

c++ - 将迭代器转换为指针?

android - 关闭 CipherInputStream 时出现 RuntimeException

c++ - 我应该使用什么类型的稀疏 vector ?

c++ - 内部类和初始化