libCurl和OpenSSL的奇怪之处

时间:2011-08-10 15:45:25

标签: c++ curl openssl mingw libcurl

这又是我。我只是无法理解,为什么会那样!

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

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

我将所有makefile.m32 pathes更改为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,我正在使用静态链接!我构建了静态libCurl库,带有OpenSSL的静态库。关于ieshims.dll我也无法理解为什么它需要它! 请帮忙,我不知道有什么问题!我根据指令编译了cUrl,一切都应该没问题。

2 个答案:

答案 0 :(得分:2)

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

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

一个解决方案是获取其他库(或自己编译),甚至更容易:你只需将dll复制到.exe所在的目录中,你应该没问题。

答案 1 :(得分:0)

使用configure脚本告诉ld 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