2017-01-31 26 views
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ですが、実際の結果はありません。 どんな助けでも歓迎されます

答えて

0

RedHatボックスにインストールされたツールとCentOSボックスにインストールされたツールを比較しようとしましたか?私はXMLから始めます。

RedHatボックスでrpm -qa | grep xmlを発行することができます(私の理解によれば、アプリケーションは正常に動作します)。

その後、そこにあるxmlパッケージがインストールされている場合は、それらをCentOSボックスにインストールしてみてください。その後、アプリケーションを再実行し、そのエラーを取り除いたかどうかを確認します。

+0

こんにちは。ヒントをありがとう。あなたは正しく、ライブラリは全く同じではありません。 RedHatには少し古いライブラリがあり、CentOSにはなかったものもあります。残念なことに、私はそれらをインストールすることができません、私はサーバーに権限を持っていないので。 –

+0

あなたはそれらをインストールする権利を持っている人に尋ねることができます。あるいは、代わりにあなたはどこかで無料のVMを動かすことができます(アマゾンやグーグルクラウドなど)。 CentOSをインストールして、それを動作させて、あなたが必要とするかもしれないlibs –

関連する問題