mit libcurl ohne dll

8

Ich verwende Microsoft Visual C ++ 2010, und ich muss eine Anwendung erstellen, die die libcurl-DLL nicht benötigt. Ich definiere CURL_STATICLIB in den Präprozessordirektiven und verbinde mit libcurl.lib, libcurl_static.lib, ws2_32.lib und winmm.lib, aber es erfordert immer noch, dass die DLL funktioniert. Wenn ich nur auf libcurl_static.lib verlinke, hat es undefinierte externe Symbolfehler. Wie kann ich es zum Laufen bringen?

Ich habe auch versucht, die Quelle zu bauen, aber ich bekomme 13 Fehler (wow, unglückliche Zahl), die alle sagen "Fehler C2011: 'pollfd': 'struct' Typ Redefinition". Könnte jemand mir helfen, libcurl arbeiten zu lassen?

    
Iron 05.08.2010, 02:08
quelle

2 Antworten

11

Es gibt keine einfache Antwort :) Libcurl hängt von anderen Drittanbieter-Bibliotheken ab (es hängt von der Binärverteilung ab, die Sie verwenden). Wenn Sie die DLL loswerden, müssen Sie manuell mit entsprechenden Drittanbietern verlinken.

Ok, der erste Punkt ist, dass Sie nicht auf libcurl.lib verlinken sollten, da es Sie an die DLL bindet, die Sie nicht wollen.

Zweiter Punkt - wenn Sie mit libcurl_static.lib verlinken, dann müssen Sie (wie oben erwähnt) auch mit Bibliotheken verlinken, von denen es abhängt. Ein einfacher Weg dies zu tun ist etwas wie folgt:

%Vor%

Aber so - Sie erhalten drei weitere Abhängigkeiten. Alternativ können Sie nach einer Möglichkeit suchen, mit ihnen statisch zu verknüpfen, aber es ist eine andere Geschichte.

Als weitere Alternative können Sie libcurl_static.lib aus Quellen wiederherstellen, nachdem Sie alle nicht benötigten Funktionen deaktiviert haben, wodurch unerwünschte Abhängigkeiten entfernt werden (siehe " Deaktivieren bestimmter Protokolle in Win32-Builds" "der INSTALL-Datei).

Und zu guter Letzt - da libcurl die Kompilierung von Windows aus Quellen nur schlecht unterstützt, empfehle ich Ihnen, die Idee, curllib.dll loszuwerden, zu überdenken.

    
Andrey 05.08.2010 23:25
quelle
1

Ich habe einen statischen Build von libcurl zum Kompilieren und Linken bekommen, indem ich sowohl HTTP_ONLY als auch CURL_STATICLIB in den Präprozessordirektiven des libcurl-Projekts und meiner Anwendung angegeben habe. Dies beseitigt alle Abhängigkeiten, die für Protokolle erforderlich sind, die Sie wahrscheinlich nicht benötigen. Die Anwendung funktioniert jetzt ohne irgendwelche DLLs zu benötigen.

Neben dem obigen musste ich nur sicherstellen, dass libcurl.lib und der Pfad zu den curl-include-Dateien in den Visual Studio-Projekteinstellungen der Anwendung festgelegt wurden.

Referenzen, die ich verwendet habe:

Deaktivieren bestimmter Protokolle in Win32-Builds: Ссылка

Verwenden von libcurl in Visual Studio (veraltet): Ссылка

    
humbads 17.12.2012 18:17
quelle

Tags und Links