2009-09-15 19 views
1

我試圖拉libcurl成一個大的C++項目。帶來的libcurl成C++程序

但我無法得到它的編譯。我看到的錯誤從ws2def.h,winsock2.h和ws2tcpip.h未來

一些錯誤是這樣的:

 
error C2061: syntax error : identifier 'iSockaddrLength' ws2def.h 225 
error C3646: 'LPSOCKADDR' : unknown override specifier ws2def.h 225 

.. 

error C2061: syntax error : identifier 'dwNumberOfProtocols' winsock2.h 1259 

我試過在編譯#包括在「curl.h」的文件直C模式,但沒有解決問題。

+0

是否有關於丟失頭文件的警告?在我的平臺上,curl.h在/ usr/include/curl /中,所以我必須#include 。 在Unix平臺上有一個名爲curl-config的實用程序,它可以告訴哪些庫和選項可以編譯和鏈接libcurl。我猜你正在使用Windows,因此可能對你沒有多大幫助。 –

+0

那些似乎VC++的錯誤,如果你在Visual Studio中構建它,請看看你可能在那裏找到的2個指南,上次我需要使用該編譯器構建它。我記得它非常直截了當:curl.haxx.se/libcurl/c – Xandy

回答

1

嘗試包括windows.h之前,包括winsock2.h或任何libcurl的頭。不要問我爲什麼這有時會起作用,但確實如此。

2

您正在使用哪種C++編譯器?我根本沒有ws2def.h。另外,請記住,winsock.h和winsock2.h彼此不兼容,並且在代碼有機會包含winsock2.h之前,某些Win32頭文件將默認包含winsock.h。因此,您可能必須通過在項目的編譯器條件中定義_WINSOCKAPI_來禁用winsock.h。

+0

恕我直言,最好在windows.h(包括winsock.h)之前包含winsock2.h,而不是定義_WINSOCKAPI_。 – KiNgMaR

+0

雖然這並不總是可能,但取決於您使用的是哪個編譯器/框架,是否使用了預編譯頭文件等等。 –

0

它還挺看起來像別的東西帶來了與捲曲衝突的winsock的定義。你可以嘗試建立一個項目,只是使用捲曲?哦,我不得不將CURL_STATICLIB添加到我的預處理器定義中以使其鏈接。