Мне нужно перенести приложение C из RedHat (x86) в CentOS (x64). Приложение прочитало XML-файл и выполнило некоторые действия с базой данных.CentOS - Ошибка анализа XML-файла
Under RedHat, все в порядке и работает как ожидалось. Но в CentOS журналы говорят, что файл недействителен.
[31/01/2017 10:29:33] -> Parsing file(file../lan/RLT_LTE.xml).
../lan/RLT_LTE.xml:1: parser error : Start tag expected, '<' not found
<?xml version="1.0" encoding="utf-8"?>
^
* ERREUR * Impossible to read data. The XML file isn't valid.
[31/01/2017 10:29:33] Error parsing XML file. Data won't be updated.
*** glibc detected *** fctc: munmap_chunk(): invalid pointer: 0x000000000041f9f0 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x75f4e)[0x7f79ffb23f4e]
fctc[0x4032dd]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x7f79ffaccd5d]
fctc[0x402b99]
======= Memory map: ========
[...]
Конечно, во-первых, я думал, что это касается файловой кодировки.
cmd_usr:$: file -i RLT_LTE.xml
RLT_LTE.xml: application/xml; charset=utf-8
Возможно, файл находится на хорошей кодировке. В моем коде здесь находится файл чтения функции.
int app_parsefile(char* xmlfile, char* xsdfile)
{
xmlDoc *doc = NULL;
xmlNode *root_element = NULL;
xmlNode *cur_node = NULL;
int res;
doc = xmlReadFile(xmlfile, "utf-8", 0);
if (doc == NULL)
{
fctc_error("Impossible to read data. The XML file isn't valid.\n");
return EXIT_FAILURE;
}
/*
* Validate the file.
*/
if (xsdfile != NULL)
{
if ((res = validate(doc, xsdfile)) != 0)
{
fctc_error("File isn't valid on XSD : %s\n", xsdfile);
return EXIT_FAILURE;
}
}
root_element = xmlDocGetRootElement(doc);
res = app_ParseTop(doc, root_element);
xmlFreeDoc(doc);
xmlCleanupParser();
return res;
}
Таким образом, ошибка, кажется, исходит от линии doc = xmlReadFile(xmlfile, "utf-8", 0);
, но я понятия не имею, как отлаживать/решить эту проблему.
Конечно, я проверил, что doc may possibly be, но без реальных результатов. Так что любая помощь была бы рада
привет. Спасибо за советы. Вы были правы, libs не то же самое. RedHat получил немного устаревшие библиотеки, а некоторые, которых CentOS не получил. К сожалению, я не могу их установить, так как у меня не было никаких разрешений на серверах. –
Ну, вы можете спросить кого-то, у кого есть права на их установку, или, альтернативно, вы можете открутить свободную виртуальную машину где-нибудь (например, на амазонке или облаке Google). установить CentOS и попытаться заставить ее работать и посмотреть, какие именно библиотеки вам могут понадобиться –