より大きなプロジェクトの一部であるクライアントを強化しています。速度が不足しているため、CNI に切り替えることを余儀なくされたため、GNU-gcj コンパイラ (gnu 4.6.3) でネイティブ コードを生成する必要がありました。
コンパイルとリンクは正常に機能し (-findirect-dispatch フラグのおかげで)、出力の実行に問題はありません。しかし、クライアントとサーバー間の通信になると、クライアントはすぐに切断されます。理由:
[XStreamClient Reader] 警告 - クライアントが切断されました (例外: com.thoughtworks.xstream.io.StreamException: XmlPullParser を作成できません)
(この Exeption は、クライアントの gcj コンパイル バージョンでのみ表示されます。コードを Java インタープリターで実行すると、うまく動作します (ただし、遅すぎます^^)) --> 難しい部分は、ソースを取得できないことです。この例外は、クライアントが使用するコンパイル済み (Java クラス ファイル) ライブラリ内にあるため、この例外が発生する場所のコード。(そして、そのライブラリの作成者に連絡できません)
ライブラリが XppReader を呼び出し、XmlPullParserクラスを作成しようとして失敗したと思います。
XStream (バージョン 1.4.3) ライブラリ (およびその他の必要な *.jar) をアンパックし、作成された *.class ファイルをコンパイルしてからオブジェクト ファイルをリンクすることでバインドします。これは、他のすべてのライブラリでも機能するようです。(私のOS=Ubuntu)
この問題を克服するために私がすでに行ったこと: XStream/XmlPullParser と gcj を集中的に検索し、「xmlpull」ファイルと「kxml2」ファイルを別のバージョンに置き換えました。しかし、何も機能しませんでした。あなたの誰かが解決策の手がかりを持っていますか?
編集:
XmlPullParser の作成が失敗する理由は、 /services/org.xmlpull.v1.XmlPullParserFactory ファイルを含む META-INF ディレクトリが XmlPullParserFactory.newInstance 関数で見つからないためであることがわかりました。これは、*.jar の *.class ファイルのみをコンパイルおよびリンクしたためです。そのため、META-INF ディレクトリを実行可能ファイルにリンクして、関数が見つけてアクセスできる方法を見つけたらすぐに、問題を解決する必要があります。あなたの誰かがそうする方法をすでに知っていますか?