这又是我。我只是无法理解,为什么会那样!
我下载了OpenSSL的编译静态库from here,此链接位于下载页面的官方cUrl站点上。我下载了Zlib并编译了它们,然后我用
编译了libcurlmingw32-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,一切都应该没问题。
答案 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