Wenn ich diesen Code mit dem Befehl “gcc test.c” ausführe,
Die Konsole zeigt eine Nachricht wie unten.
/tmp/cc1vsivQ.o: In function `main':
test.c:(.text+0xe1): undefined reference to `curl_global_init'
test.c:(.text+0xe6): undefined reference to `curl_easy_init'
test.c:(.text+0x10c): undefined reference to `curl_easy_setopt'
test.c:(.text+0x12e): undefined reference to `curl_easy_setopt'
test.c:(.text+0x150): undefined reference to `curl_easy_setopt'
test.c:(.text+0x17e): undefined reference to `curl_easy_cleanup'
test.c:(.text+0x1b3): undefined reference to `curl_easy_cleanup'
test.c:(.text+0x1db): undefined reference to `curl_easy_setopt'
test.c:(.text+0x1e7): undefined reference to `curl_easy_perform'
test.c:(.text+0x1ff): undefined reference to `curl_easy_cleanup'
Ich weiß nicht, wie ich das lösen soll.
Sie verlinken nicht mit der Bibliothek.
Wenn Sie eine externe Bibliothek verwenden, müssen Sie Verknüpfung damit:
$ gcc test.c -lcurl
Die letzte Option weist GCC an, zu verknüpfen (-l) mit der Bibliothek curl.
@Accountantم Wenn es nur ein Rauschen gibt curl Bibliothek, wird sie statisch gelinkt. Andernfalls, wenn es dynamisch ist, wird es dynamisch verknüpft.
– Irgendein Programmierer-Typ
24. Februar 2019 um 8:34 Uhr
Chiralität
Zusätzlich zur Antwort von Joachim Pileborg ist es hilfreich, sich daran zu erinnern, dass das Verknüpfen von gcc/g++ empfindlich auf die Reihenfolge reagiert und dass Ihre verknüpften Bibliotheken den Dingen folgen müssen, die von ihnen abhängen.
$ gcc -lcurl test.c
wird versagen, es fehlen die gleichen Symbole wie zuvor. Ich erwähne dies, weil ich auf diese Seite gekommen bin, weil ich diese Tatsache vergessen habe.
Können Sie mir bitte sagen warum gcc -lcurl test.cwird versagen aber gcc test.c -lcurl hat gut funktioniert?
– Fahrbahn
14. August 2018 um 15:09 Uhr
@Lane Die gcc -lcurl test.c schlägt fehl, da gcc die Dateien in der Reihenfolge der Eingabe verknüpft, sodass es beispielsweise nicht referenzieren kann curl_global_init – in Dateien erscheinen nach test.c.
– Ebrahimi
14. Oktober 2018 um 5:52 Uhr
Vielen Dank für diesen Beitrag!!!! Das hat meinen Tag gerettet. Nachdem ich diesen Beitrag gelesen habe, habe ich gerade die Reihenfolge der Verknüpfungsbibliotheken geändert und konnte erfolgreich kompilieren und verknüpfen.
– Ashish Mittal
20. November 2018 um 4:28 Uhr
Ich habe das gleiche Problem, aber ich verwende g++ mit einer Make-Datei. Dies ist ein Linker-Problem. Sie müssen die Option -lcurl auf dem Compiler und dem Linker hinzufügen. In meinem Fall in der Make-Datei:
Je nachdem, wie schlecht die Dinge sind, benötigen Sie möglicherweise ein -L/irgendwo in LDFLAGS, um den Linker wissen zu lassen, wo sich die Bibliotheken befinden. ldconfig soll sie aufnehmen und bei jedem Start finden, aber auf einer neuen Maschine kann es ein wenig Anschubsen erfordern, wie das Hinzufügen eines Verzeichnisses zu Ihrer /etc/ld.so.conf.
14126900cookie-checkundefinierter Verweis auf curl_global_init, curl_easy_init und andere Funktionen (C)yes