[C/C++] Statische Library einbinden

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Chillikid, 14. Dezember 2008 .

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 14. Dezember 2008
    Statische Library einbinden

    Hallo,

    ich hab momentan ein kleines Problem. Ich will mit curl (eine Bibliothek für HTTP, FTP etc.) ein Projekt machen, aber es funktioniert nicht ganz. Ich habe im Linker die Dateien angegeben, aber nach dem Kompilieren sagt das Programm immer "Die Anwendung konnte nicht gestartet werden, weil libcurl.dll nicht gefunden wurde."
    Nur ich will ja gar keine DLL haben?(

    Ich benutze Code::Blocks und den GCC Compiler(von MinGW).

    Kann mir jemand sagen was ich falsche mache?

    Chillikid
     

  2. Anzeige
  3. #2 14. Dezember 2008
    AW: Statische Library einbinden

    Du musst libcurl zu seiner Statischen Lib kompilieren (Das geht in den Projekteigenschaften). Danach einfach dein Programm gegen die lib linken und es sollte klappen.
     
  4. #3 14. Dezember 2008
    AW: Statische Library einbinden

    Naja...so ähnlich hab es ich ja, nur dass ich die libcurl nicht selber zur statischen Lib kompiliert habe sondern die von deren Downloadseite habe.
    Also die libcurl.a habe ich bereits, er macht nur beim Linken iregnd 'nen Müll, so dass er am Ende trotzdem immer nach der dll sucht...
     
  5. #4 15. Dezember 2008
    AW: Statische Library einbinden

    Naja, die precompilten-Versionen von der libcurl-Seite sind alle dynamisch. Die .a-Datei is nur da, damit der Linker weiß, woher die Verweise zu den Funktionen kommen, die eigentlichen Funktionen sin aber trotzdem in der DLL.
    Du kommst nich drumrum, libcurl selber zu compilen. Wenn du MSys verwendest, solltest du mit
    Code:
    ./configure --disable-shared --enable-static
    die statischen bibliotheken bauen können.
     
  6. #5 15. Dezember 2008
    AW: Statische Library einbinden

    Soo ich hab das was du gesagt hast jetzt auch endlich hinbekommen, aber funktionieren will es leider trotzdem noch nicht. Ich habe jetzt eine statische Bibliothek hingekriegt, aber jetzt gibt es beim kompilieren meines eigentlochen Projekts Fehler.
    Ich weiß es nicht, aber vllt. kennst du dich da noch weiter aus? Denn die Fehlermeldungsagt
    und ich kann damit leider nichts Anfangen...Wäre nett, wenn mir da jemand oder auch du pyro weiterhelfen könnte!

    Chillikid

    PS: Ich kann dich leider schon gar nicht mehr Bewerten pyro ^^
     
  7. #6 15. Dezember 2008
    AW: Statische Library einbinden

    Hm, du hast dein projekt shcon gegen die lib gelinkt oder?

    Normalerweiße tritt der Fehler auf, wenn man ne Funktion verwendet, die nirgendwo definiert ist und der Linker sie nicht finden kann. Aber wenn du gegen die Lib gelinkt hast, sollte das eigentlich nicht sein.
     
  8. #7 15. Dezember 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Statische Library einbinden

    Ich denke schon, ich zeige einfach mal, was ich bisher gemacht habe:

    main.cpp
    Code:
    #include "main.h"
    
    using namespace std;
    
    int main()
    {
     cout << "Initializing Curl...";
     CURL *curl;
     CURLcode res;
    
     curl_global_init(CURL_GLOBAL_WIN32);
    
     curl=curl_easy_init();
     if(!curl) {
     cout << "Error\n";
     return -1;
     }
     cout << "Done\n";
    
     cout << "Setting URL to http://www.google.de...";
     curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.de");
     cout << "Done\n";
    
     cout << "Setting header-print to 0...";
     curl_easy_setopt(curl, CURLOPT_HEADER, 0);
     cout << "Done\n";
    
     cout << "Setting write function...";
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
     cout << "Done\n";
    
     cout << "Setting buffer...";
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
     cout << "Done\n";
    
     cout << "Retrieving data...";
     res = curl_easy_perform(curl);
    
     curl_easy_cleanup(curl);
    
     if(res == CURLE_OK) {
     cout << "Done\n";
     cout << "HTML_Code of http://www.google.com:\n\n";
     cout << buffer << endl;
     }
    
     return 0;
    }
    
    // This is the writer call back function used by curl
    static int writer(char *data, size_t size, size_t nmemb,
     std::string *buffer)
    {
     // What we will return
     int result = 0;
    
     // Is there anything in the buffer?
     if (buffer != NULL)
     {
     // Append the data to the buffer
     buffer->append(data, size * nmemb);
    
     // How much did we write?
     result = size * nmemb;
     }
    
     return result;
    }
    main.h
    Code:
    #ifndef MAIN_H_INCLUDED
    #define MAIN_H_INCLUDED
    
    #include <iostream>
    #include <string>
    #include <curl/curl.h>
    
    static std::string buffer;
    
    static int writer(char *data, size_t size, size_t nmemb, std::string *buffer);
    
    #endif // MAIN_H_INCLUDED
    
    Linker
    [​IMG]
     

  9. Videos zum Thema
Die Seite wird geladen...