2010-08-05 19 views
8

Microsoft Visual C++ 2010 kullanıyorum ve libcurl dll gerektirmeyen bir uygulama yapmam gerekiyor. Önişlemci direktiflerinde CURL_STATICLIB tanımını yapıyorum ve libcurl.lib, libcurl_static.lib, ws2_32.lib ve winmm.lib linklerine bağlanıyorum, fakat yine de çalışmanın dll'sini gerektiriyor. Sadece libcurl_static.lib dosyasına bağlanırsam, tanımlanmamış dış sembol hataları vardır. Nasıl çalışabilirim?dcur olmadan libcurl kullanarak

Ayrıca, kaynak oluşturmayı da denedim, ancak hepsinin "error C2011: 'pollfd': 'struct' type redefinition" şeklinde yazdığı 13 hata (wow, unlucky number) alıyorum. Birisi bana libcurl çalışmasına yardım edebilir mi?

cevap

11

Basit bir yanıt yoktur :) Libcurl diğer üçüncü parti lib'lere bağlıdır (kullandığınız ikili dağıtıma bağlıdır). DLL'den kurtuldukça - karşılık gelen üçüncü taraflarla manuel olarak bağlantı kurmanız gerekir.

Tamam, bu nedenle ilk noktayı, istemediğiniz DLL'ye bağladığınız için libcurl.lib'a bağlanmamalısınız.

İkinci nokta - libcurl_static.lib ile bağlantı kurduğunuzda (yukarıda belirtildiği gibi), bağlı olduğu kütüphanelerle de bağlantı kuracaksınız. Bunu yapmanın basit bir yolu böyle bir şey yapmaktır:

#if defined CURL_STATICLIB 

#if defined _DEBUG 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\lib\\Debug\\curllib_static.lib") 
#else 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\lib\\Release\\curllib_static.lib") 
#endif 

#pragma comment(lib, "ws2_32.lib") 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\libeay32.lib") 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\openldap.lib") 
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\ssleay32.lib") 

#endif 

Ama bu şekilde - Üç kez daha bağımlılıkları alırsınız. Alternatif olarak, bunlarla statik olarak bağlantı kurmanın bir yolunu arayabilirsiniz, ancak farklı bir hikaye. Bir başka alternatif olarak

- Eğer böylece istenmeyen bağımlılıkları kaldırarak gerekmez tüm özellikleri devre dışı bıraktıktan sonra kaynaklardan libcurl_static.lib kurabiliriz (açıklandığı gibi dosya YÜKLE ait "Win32 Özgül Protokolleri devre dışı bırakılması kurar") .

Ve son nokta - libcurl kaynaklardan derleme için oldukça zayıf bir desteğe sahip olduğu için, curllib.dll'dan kurtulma fikrini tekrar gözden geçirmenizi öneririm.

1

Libcurl projesinin ve benim uygulamamın önişlemci yönergelerinde hem HTTP_ONLY hem de CURL_STATICLIB belirterek derlemek ve bağlantı kurmak için statik bir libcurl yapısı var. Bu, gereksinim duymadığınız protokollerin gerektirdiği tüm bağımlılıkları ortadan kaldırır. Uygulama artık herhangi bir DLL gerektirmeden çalışıyor.

Yukarıdakilerin yanısıra, libcurl.lib dosyasının ve uygulamanın içerdiği dosyaların görsel stüdyo proje ayarlarında içerilen dosyaların kıvrılma yolunun açık olduğundan emin olmak istedim.

Kaynaklar kullandığım: (out tarihli) Visual Studio libcurl kullanarak http://curl.haxx.se/mail/lib-2011-12/0123.html

: Win32 Spesifik Protokoller devre dışı bırakılması

kurar http://curl.haxx.se/libcurl/c/visual_studio.pdf

İlgili konular