0
我需要從RedHat(x86)移植到CentOS(x64)的C應用程序。該應用程序讀取一個XML文件,並使用一些數據庫操作。CentOS - 解析XML文件時出錯
在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);
,但我不知道如何調試/解決這個問題。
當然,我檢查了什麼文檔may possibly be,但沒有真正的結果。 因此,任何幫助將受到歡迎
你好。感謝您的提示。你說得對,libs根本就不一樣。 RedHat有一些舊的庫,還有一些CentOS沒有。不幸的是,我無法安裝它們,因爲我沒有在服務器上獲得任何權限。 –
那麼你可以問一個有權安裝它們的人,或者你可以在某個地方使用一個免費的虛擬機(比如亞馬遜或谷歌雲)。安裝CentOS,並嘗試使其工作,並看到你可能需要什麼庫 –