Hinzufügen statischer libcurl zu Code :: Blocks IDE

9

Ich kann nicht herausfinden, wie ich eine statische libcurl-Bibliothek zu meiner Code :: Blocks-IDE hinzufügen kann. Ich möchte es statisch, weil dann keine .dll-Dateien, die nicht standardmäßig in Windows enthalten sind, während der Laufzeit meines Programms benötigt werden. Ich benutze diese libcurl: Ссылка (minGW ohne OpenSSL)

Hier sind meine globalen Compilereinstellungen: Ссылка

Ich erhalte den folgenden Fehler:

  

ld.exe || kann -lCURL_STATICLIB nicht finden | || === Build fertig: 1 Fehler, 0 Warnungen === |

beim Kompilieren dieses Codes:

%Vor%

Offensichtlich findet es CURL_STATICLIB nicht, deshalb habe ich keine Ahnung warum. Ich bin nicht einmal sicher, ob es notwendig war, CURL_STATICLIB zu meinen Linker-Einstellungen hinzuzufügen (ich las es in anderen Foren). Ich habe einige Leute gefunden, die dasselbe Problem haben, aber es wird an keiner Stelle richtig beantwortet:

  

stackoverflow.com/questions/4176503/frustrierte-mit-libcurl

     

forens.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, damit zu kämpfen, bitte hilf mir.

BEARBEITEN:

Hallo Victor, danke für die Antwort!

Ich werde versuchen, so detailliert wie möglich zu sein, damit es keine Missverständnisse gibt. Also, hier ist das Bild des Verzeichnisbaums für meinen C: \ libs \ Ordner:

Ссылка

Wie Sie sehen können, enthält es auch Build-Protokoll, Sie werden feststellen, dass der Fehler dieses Mal ist anders als der, den ich vorher gepostet habe. Das liegt daran, dass ich den globalen Compiler geändert und Projekteinstellungen erstellt habe.

Meine neuen Build-Projekteinstellungen: Ссылка Meine neuen globalen Compilereinstellungen: Ссылка

Ich bin mir sicher, dass ich diese Einstellungen falsch konfiguriert habe und deshalb kann ich sie nicht kompilieren.

    
Javatar 05.06.2011, 14:52
quelle

1 Antwort

21

Okay, ich habe es geschafft, Ihr Beispiel erfolgreich mit libcurl unter Verwendung der statischen Verbindung aufzubauen. Die Details, um diese Arbeit zu machen, sind ziemlich kompliziert - die korrekte Einrichtung kann für die Unvorsichtigen schwierig werden.

Hier sind die Schritte, die ich verwendet habe, um diese Arbeit zu machen. Achten Sie darauf, sie genau zu befolgen:

  1. Gehen Sie zu Projekt-Build-Optionen- & gt; Compiler-Einstellungen- & gt; #defines : Geben Sie in CURL_STATICLIB ein. Wenn dies definiert ist, werden die Funktionssignaturen des libcurl.h-Headers vorverarbeitet, um eine statische Verknüpfung zu ermöglichen. Andernfalls wird eine dynamische Verknüpfung angenommen und die verstümmelten Namen werden dann _imp__* . Die nicht aufgelösten Fehler von Ihrem Screenshot zeigen an, dass versucht wird, einen dynamischen Link anstelle des gewünschten statischen Links zu erstellen.

  2. Unter Projekt-Build-Optionen - Link-Einstellungen- & gt; Link-Bibliotheken stellen Sie sicher, dass es Folgendes enthält: curl, rtmp, idn, ssl, ssh2, krypto, z , ws2_32, wldap32, winmm, gdi32 . Beachten Sie, dass die Reihenfolge wichtig ist. Aufgrund eines Konstruktionsfehlers des Gnu-Linkers müssen die am meisten abhängigen Bibliotheken zuerst aufgeführt werden, gefolgt von den am wenigsten abhängigen. Andere Linker wie msvc link und borlands ilinker zeigen solche Probleme nicht - die Bibliotheken können in beliebiger Reihenfolge aufgelistet werden.

  3. Unter Projektbuildoptionen- & gt; Linkereinstellungen- & gt; Andere Linkeroptionen fügen Sie '-static' hinzu. Dadurch wird sichergestellt, dass die statische Version von 'idn' verwendet wird. Wenn dieser Schalter weggelassen wird, könnte Ihr kompiliertes Programm davon abhängen, dass 'libidn-11.dll' ausgeführt wird, was wahrscheinlich nicht das ist, was Sie wollen.

An diesem Punkt sollten Sie in der Lage sein, libcurl-Programme ohne irgendwelche Probleme zu kompilieren und zu verknüpfen. Ein paar Dinge erwähnenswert,

  • Unter Andere Linker-Optionen werden die zusätzlichen zusätzlichen Schalter aus Ihrem Screenshot nicht benötigt. 'libcurl.a' ist bereits aufgelistet und wird von Link libraries abgedeckt.

  • Die 'libcrypto.a' scheint die gleichen Referenzen zu enthalten wie 'libeay32.a', also wird nur einer von ihnen benötigt. "Libeay32.a" bewirkt jedoch trotz seiner größeren Größe eine dynamische Verknüpfung. Wenn Sie möchten, dass Ihre Anwendung vollständig eigenständig ist, verwenden Sie stattdessen 'libcrypto.a' wie im Screenshot.

  • Wenn Sie in der Zukunft dynamisch verknüpfen möchten, ersetzen Sie den Eintrag einfach durch 'curldll' unter Link libraries und entfernen Sie die CURL_STATICLIB -Definition. Die zusätzlichen Bibliotheken (z. B. ssl, idn, rtmp usw.) werden nicht benötigt, da libcurl.dll sie bereits abdeckt.

  • Sie können den langwierigen fehleranfälligen Aufbau eines neuen libcurl-Programms vermeiden, indem Sie Codeblock-Benutzervorlagen verwenden. (zB Datei- & gt; Neu- & gt; Projekt- & gt; Benutzervorlagen )

Dies löst hoffentlich alle Build-Probleme, die Sie mit libcurl haben, ein für allemal.

    
greatwolf 08.06.2011, 23:33
quelle

Tags und Links