Ich versuche, die Bibliothek libxml2 in C++ zu verwenden, aber ich bekomme einige Fehler, die ich nicht zu lösen weiß. Mein Code ist ein grundlegendes Beispiel für die Bibliothek.So lösen Sie "Verschiebung abgeschnitten, um zu passen: R_X86_64_PC32 gegen undefiniertes Symbol` xmlStrcmp '"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
void
parseStory (xmlDocPtr doc, xmlNodePtr cur) {
xmlChar *key;
cur = cur->xmlChildrenNode;
while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"keyword"))) {
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf("keyword: %s\n", key);
xmlFree(key);
}
cur = cur->next;
}
return;
}
static void
parseDoc(char *docname) {
xmlDocPtr doc;
xmlNodePtr cur;
doc = xmlParseFile(docname);
if (doc == NULL) {
fprintf(stderr,"Document not parsed successfully. \n");
return;
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
fprintf(stderr,"empty document\n");
xmlFreeDoc(doc);
return;
}
if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
fprintf(stderr,"document of the wrong type, root node != story");
xmlFreeDoc(doc);
return;
}
cur = cur->xmlChildrenNode;
while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"storyinfo"))){
parseStory (doc, cur);
}
cur = cur->next;
}
xmlFreeDoc(doc);
return;
}
int
main(int argc, char **argv) {
char *docname;
if (argc <= 1) {
printf("Usage: %s docname\n", argv[0]);
return(0);
}
docname = argv[1];
parseDoc (docname);
return (1);
}
Und ich bekomme diese Fehler beim Erstellen des Projekts.
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:26: undefined reference to `xmlStrcmp‘
/cygdrive/c/Users/Robin/Dokumente/NetBeansProjects /xml/main.cpp:26:(.text+0x36): Verlagerung abgeschnitten passen: R_X86_64_PC32 gegen undefiniertes Symbol `xmlStrcmp‘
/cygdrive/c/Benutzer/robin/Dokumente/NetBeansProjects/xml/main .cpp: 27: undefinierter Verweis auf `xmlNodeListGetString '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:27:(.text+0x59): Verlagerung abgeschnitten zu passen: R_X86_64_PC32 gegen undefiniertes Symbol `xmlNodeListGetString‘
build/Debug/Cygwin-Fenster/main.o: In Funktion
parseDoc': /cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:42: undefined reference to
xmlParseFile‘/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:42:(.text+0xad): Umzug abgeschnitten, um zu passen: R_X86_64_PC32 gegen undefiniertes Symbol `xmlParseFile '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:49: undefined reference to `xmlDocGetRootElement‘
/cygdrive/c/Users/Robin/Dokumente/NetBeansProjects/xml/main. CPP: 49 :(text + 0xec.): Verlagerung abgeschnitten zu passen: R_X86_64_PC32 gegen undefiniertes Symbol `xmlDocGetRootElement‘
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:53: undefined reference to `xmlFreeDoc‘
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:53:(.text+0x126): Relocation abgeschnitten zu passen: R_X86_64_PC32 gegen undefiniertes Symbol `xmlFreeDoc '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:57: undefinierte Bezugnahme auf` xmlStrcmp'
/cygdrive/c/Benutzer/robin/Dokumente/NetBeansProjects/xml/main.cpp. 57 :(text + 0x142): Verlagerung abgeschnitten passen: R_X86_64_PC32 gegen undefiniertes Symbol `xmlStrcmp‘
/cygdrive/c/Benutzer/robin/Documents/NetBeansProjects/xml/main.cpp: 59: undefinierter Verweis auf `xmlFreeDoc '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:59 :(.text + 0x17a): Verlagerung abgeschnitten zu passen: R_X86_64_PC32 gegen undefiniertes Symbol `xmlFreeDoc‘
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:65: undefinierte Bezugnahme auf `xmlStrcmp '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:65:(.text+0x1a6): Verlagerung abgeschnitten passen: R_X86_64_PC32 gegen undefiniertes Symbol `xmlStrcmp'
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:72: undefined beziehen Ence zu `xmlFreeDoc‘
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:72:(.text+0x1d9): Verlagerung abgeschnitten passen: R_X86_64_PC32 gegen undefiniertes Symbol `xmlFreeDoc '
build/Debug/Cygwin-Fenster/main.o: main.cpp :(rdata $ .refptr.xmlFree [.refptr.xmlFree] + 0x0.): undefined reference to `xmlFree'
Ich habe diesen Beitrag What does this GCC error "... relocation truncated to fit..." mean? gelesen, aber ich habe keine Ahnung, wie ich mein Problem lösen kann. Meine IDE ist Netbeans 8.2 mit Cygwin64 auf einer Windows 10 64 Bit Maschine. Ich habe libxml2-2.9.3-win32-x86_64.7z und iconv-1.14-win32-x86_64.7z enthalten. Ich hoffe du kannst mir helfen, danke.
Mögliche Duplikat von [Was bedeutet dieser GCC-Fehler "... Verlagerung abgeschnitten zu passen ..." bedeuten?] (http://stackoverflow.com/questions/10486116/what-does- this-gcc-error-relocation-truncated-to-fit-mean) –
Wie ich geschrieben habe, habe ich den Beitrag gelesen, aber keine Lösung für mein Problem gefunden. – rpanske
Hallo @rpanske! Haben Sie jetzt eine Lösung für dieses Problem gefunden? Ich kompiliere C++ - Code mit SQLite und Python, die früher in Mac in Windows mit Netbeans IDE und Cygwin-Compiler funktionierten. Ich bekomme denselben Fehler – user1998463