Я пытаюсь использовать библиотеку libxml2 в C++, но получаю некоторые ошибки, которые я не знаю, как их решить. Мой код является базовым примером библиотеки.Как разрешить «перемещение, усеченное, чтобы соответствовать: R_X86_64_PC32 от неопределенного символа« 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);
}
И я получаю эти ошибки при построении проекта.
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:26: неопределенная ссылка на `xmlStrcmp»
/cygdrive/C/Users/малиновка/Документы/NetBeansProjects /xml/main.cpp:26:(.text+0x36): перемещение усекается: R_X86_64_PC32 против неопределенного символа `xmlStrcmp»
/cygdrive/с/Users/робин/Документы/NetBeansProjects/XML/основной .cpp: 27: undefined ссылка на `xmlNodeListGetString '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:27:(.text+0x59): перемещение усекается: R_X86_64_PC32 против неопределенного символа `xmlNodeListGetString»
сборки/Debug/Cygwin-Windows/main.o: В функции
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): перемещение укороченный для соответствия: R_X86_64_PC32 в отношении неопределенного символа `xmlParseFile '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:49: неопределенная ссылка на `xmlDocGetRootElement»
/cygdrive/с/Пользователи/робин/Документы/NetBeansProjects/XML/главное. каст: 49 :(текст + 0xec). перемещение усекается: R_X86_64_PC32 против неопределенного символа `xmlDocGetRootElement»
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:53: неопределенная ссылка на `xmlFreeDoc»
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:53:(.text+0x126): перемещение усекается: R_X86_64_PC32 против неопределенного символа `xmlFreeDoc '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:57: неопределенной ссылки на` xmlStrcmp'
/cygdrive/с/Пользователи/робин/Документы/NetBeansProjects/XML/main.cpp: 57. :(текст + 0x142): перемещение усекается: R_X86_64_PC32 против неопределенного символа `xmlStrcmp»
/cygdrive/с/Пользователи/robin/Documents/NetBeansProjects/xml/main.cpp: 59: Неопределенная ссылка на `xmlFreeDoc '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:59 :(.текст + 0x17a): перемещение усекается: R_X86_64_PC32 против неопределенного символа `xmlFreeDoc»
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:65: неопределенная ссылка на `xmlStrcmp '
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:65:(.text+0x1a6): перемещение усекается: R_X86_64_PC32 против неопределенного символа `xmlStrcmp'
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:72: undefined Refer ENCE в `xmlFreeDoc»
/cygdrive/c/Users/robin/Documents/NetBeansProjects/xml/main.cpp:72:(.text+0x1d9): перемещения усекается: R_X86_64_PC32 против неопределенного символа `xmlFreeDoc '
сборки/Debug/Cygwin-Windows/main.o: main.cpp :(RDATA $ .refptr.xmlFree [.refptr.xmlFree] + 0x0). неопределенная ссылка на `xmlFree'
Я прочитал это сообщение What does this GCC error "... relocation truncated to fit..." mean?, но я понятия не имею, как решить мою проблему. Моя IDE - NetBeans 8.2 с Cygwin64 на 64-битной машине Windows 10. Я включил libxml2-2.9.3-win32-x86_64.7z и iconv-1.14-win32-x86_64.7z. Надеюсь, ты поможешь мне, спасибо.
Возможный дубликат [Что делает эта ошибка GCC? ... усеченная в соответствии с ... »? (http://stackoverflow.com/questions/10486116/what-does- this-gcc-error-relocation-truncated-to-fit-mean) –
Как я уже писал, я прочитал сообщение, но не нашел решения для своей проблемы. – rpanske
Привет @rpanske! Вы нашли решение этой проблемы сейчас? Я компилирую C++-код с SQLite и Python, который отлично работал на Mac в Windows с использованием NetBeans IDE и Cygwin-компилятора. Я получаю такую же ошибку – user1998463