Das hinzufügen von statischen libcurl zu Code::Blocks IDE
Ich kann nicht herausfinden, wie man richtig fügen Sie eine statische Bibliothek libcurl zu meinem Code::Blocks IDE. Ich will es statisch, da dann keine .dll-Dateien, die nicht in Windows enthalten standardmäßig benötigt werden, während der Laufzeit meines Programms. Ich bin mit dieser libcurl:
http://curl.haxx.se/dlwiz/?type=lib&os=Win32&flav=- (minGW ohne OpenSSL)
Hier sind meine globalen compiler Einstellungen: http://img845.imageshack.us/img845/1381/halpr.jpg
Ich erhalte die folgende Fehlermeldung:
ld.exe||nicht finden kann -lCURL_STATICLIB| ||=== Build finished: 1 errors, 0 warnings ===|
beim kompilieren diesen code:
include <stdio.h>
include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
Offensichtlich kann es nicht finden CURL_STATICLIB, do hab ich keine Ahnung, warum. Ich bin auch nicht sicher, ob es nötig war, um hinzuzufügen CURL_STATICLIB mein linker Einstellungen(ich lese es auf anderen Foren). Ich fand einige Leute, die dasselbe problem, aber es ist nicht richtig beantwortet, auf jedem Platz:
stackoverflow.com/questions/4176503/frustrated-with-libcurl
forums.codeblocks.org/index.php?topic=11391.0
old.nabble.com/gcc-working-with-libcurl-td20506927.html
forums.devshed.com/c-programming-42/linker-error-using-libcurl-698071.html
Ich bin so müde zu kämpfen mit diesem, bitte helfen Sie mir.
EDIT:
Hallo Victor, danke für die Antwort!
Werde ich versuchen, so ausführlich wie möglich, damit es zu keinen Missverständnissen geben.
So, hier ist das Bild des Verzeichnis - /Ordner-Struktur für meine C:\libs\ Ordner:
http://img199.imageshack.us/img199/6977/curl1.png
Wie Sie sehen können, es enthält auch die build-log, werden Sie feststellen, dass der Fehler dieses mal ist
anders als die, die ich gepostet vorher. Es ist, weil ich veränderte Globale compiler-und build-Projekt-Einstellungen.
Mein neues Projekt Erstellen Einstellungen: http://img863.imageshack.us/img863/4404/buildoptions.png
Meine neuen Globalen Compiler Einstellungen: http://img225.imageshack.us/img225/4926/curl2.png
Ich bin sicher, dass ich so konfiguriert haben, dass diese Einstellungen falsch und deshalb kann ich nicht kompilieren.
- Nur, um ein wenig mehr info können Sie auch das leisten, was die eigentliche Kommandozeile aufgerufen aussieht? Sie können dies tun, indem Sie unter der Registerkarte "Andere Einstellungen" und wählen die Vollständige Kommandozeile aus dem drop-down. Sie können auch eine Liste der Dateien, die es unter Ihrer lib/curl-7.x.x*/lib-Verzeichnis?
- Wie hast du das "installieren" der libcurl-Dateien? Hast du gerade ein neues Verzeichnis und kopieren Sie die lib-und include-Ordner gibt und dann sagen codeblocks dort zu suchen? Ich bin versucht zu lösen das Problem selbst. Danke! 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, ich habe es geschafft, bauen Ihr Beispiel erfolgreich mit libcurl verwenden statische Bindung. Die details an, um diese arbeiten sind sehr Komplex ist -- setzen Sie es richtig problematisch für den unvorsichtigen.
Hier sind die Schritte, die ich verwendet, um diese Arbeit machen, sicher sein, Ihnen zu Folgen gezielt:
Gehen Projekt-build-Optionen->Compiler-Einstellungen->#definiert: geben Sie in
CURL_STATICLIB
. Wenn diese definiert ist, die libcurl.h-header wird seine Funktion Signaturen vorverarbeitet, um fit statische Bindung. Ansonsten dynamische Bindung wird angenommen, und die entstellten Namen werden dann_imp__*
. Die ungelöste Fehler aus deinem screenshot zeigen, es ist, der versucht, eine dynamic link anstatt der gewünschten statischen link.Unter Projekt-build-Optionen->Linker Einstellungen->Link-Bibliotheken stellen Sie sicher, es enthält die folgenden: curl, rtmp, idn, ssl, ssh2 -, crypto -, z -, ws2_32, wldap32, winmm, gdi32. Beachten Sie, dass die Reihenfolge wichtig ist. Aufgrund einer design-Schwäche des gnu-linker, der die meisten abhängigen Bibliotheken müssen zuerst aufgeführt werden, gefolgt von mindestens abhängig. Andere Linker wie msvc link und borland ilinker weisen nicht solche Probleme -- die Bibliotheken können in beliebiger Reihenfolge aufgeführt werden.
Unter Projekt-build-Optionen->Linker Einstellungen->Andere linker-Optionen add-in '-static'. Dies wird sicherstellen, dass die statische version von 'idn' verwendet wird. Falls dieser Schalter ausgelassen wird dann die kompilierte Programm verlassen konnte, auf 'libidn-11.dll" laufen, die ist wahrscheinlich nicht das, was Sie wollen.
Zu diesem Zeitpunkt, Sie sollten in der Lage sein zu kompilieren und verknüpfen libcurl-Programme ohne Probleme. Ein paar Dinge erwähnenswert,
Unter Anderen linker-Optionen andere zusätzliche Schalter aus deinem screenshot nicht benötigt werden. 'libcurl.ein " bereits gelistet und durch Link libraries.
Die " libcrypto.ein "scheint die gleichen Referenzen wie das" libeay32.ein' so wird nur eine von Ihnen benötigt. Jedoch, " libeay32.eine' dynamische Bindung bewirkt, dass trotz seiner größeren Größe. Wenn Sie möchten, dass Ihre Anwendung "voll eigenständige" nutzen " libcrypto.ein' statt, wie in der Abbildung.
Wenn Sie möchten link dynamisch in die Zukunft, ersetzen Sie einfach die Liste mit 'curldll" unter Link libraries und entfernen Sie die
CURL_STATICLIB
definieren. Die zusätzlichen Bibliotheken (zB. ssl, idn, rtmp, etc.) sind nicht erforderlich, da libcurl.dll schon bedeckt.Können Sie vermeiden, den mühsamen und fehleranfälligen Aufbau einer neuen libcurl-Programm durch den Einsatz von codeblocks' Benutzer-Vorlagen. (zB. Datei->New->Projekt->Benutzer-Vorlagen)
Hoffentlich behebt alle Probleme mit dem build haben Sie mit libcurl einmal und für alle.