libCurl和OpenSSL的怪事

Weird things with libCurl and OpenSSL

本文关键字:OpenSSL libCurl      更新时间:2023-10-16

又是我。我就是不明白,为什么事情会这样发展!

我下载了编译好的OpenSSL的静态库,从这里,这个链接在官方cUrl站点的下载页面。我下载了Zlib并编译了它们,然后用

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

我修改了所有的makefile。Zlib和OpenSSL文件的m32路径。一切顺利,我收到了libcurl。A和libcurllll。我添加到lib文件夹的我的项目libcurl。A和libay32。libssleay32。A和libza。我建了一个项目,它说一切正常。我运行,然后它就终止了。我正在使用MinGW和Eclipse。

是这样编译的:

g++ -DCURL_STATICLIB -O0 -g3 -Wall -c -fmessage-length=0 -osrcmain.o ..srcmain.cpp
g++ -L..lib -oYTUploader.exe srcmain.o -lcurl -lws2_32 -lwldap32 -leay32 -lssleay32 -lz

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

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

所以问题是:虽然你链接到静态库,库然后加载和使用动态库。它们不是"真正的"静态库。

一种解决方案是获得其他库(或自己编译它们),或者更简单:您只需将dll复制到.exe所在的目录中,就可以了。

使用configure脚本告诉openssl在哪里安装了这些文件。默认值如下:

tar -zxf curl-7.33.0.tar.gz
cd curl-7.33.0
./configure --prefix=/opt/curlssl --with-ssl=/usr/local/ssl --enable-http --enable-ftp LDFLAGS=-L/usr/local/ssl/lib CPPFLAGS=-I/usr/local/ssl/include
make
make install