2011-08-10 34 views
0

這是我的一次。我無法理解,爲什麼會這樣!libCurl和OpenSSL怪異的東西

我下載了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,我正在使用靜態鏈接!我使用OpenSSL的靜態庫構建了靜態libCurl庫。關於ieshims.dll我也無法得到它爲什麼需要它! 請幫忙,我不知道什麼是錯的!我根據指令編譯cUrl,一切都應該很好..

+0

請嘗試[此下載](http://www.gknw.net/mirror/curl/win32/curl-7.21.7-devel-mingw32.zip) 「Win32 - generic」下的捲曲網站。 – rubenvb

+0

順便說一句,儘管SO是一個你可以問這些問題的地方,但最好還是在curl或mingw用戶的郵件列表或論壇上提問。 。 – rubenvb

+0

@rubenvb:我試過,我得到了一個未定義的引用erorrs :(而且我今天寄出蜷縮庫 - 郵件列表 – Alecs

回答

2

你鏈接的openssl-libs似乎是導入庫。這意味着它們只包含代碼調用函數所需的信息,然後從dll加載並調用相應的函數。

所以問題是:雖然你鏈接到靜態庫,然後加載和使用動態DLL。它們不是「真正的」靜態庫。

一種解決方案是讓其他庫(或自己編譯它們),或者更簡單:你剛纔的dll文件複製到該目錄,其中您的.exe所在,你應該罰款。

+0

,做你知道我在哪裏可以得到OpenSSL靜態庫?我怎樣才能認識到這些庫是「真正的」靜態庫? – Alecs

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