我正在增强一个客户,这是一个更大的项目的一部分.由于速度不足,我被迫切换到CNI,因此我必须使用GNU-gcj编译器生成本机代码(gnu 4.6.3).
编译和链接工作正常(感谢-findirect-dispatch标志),我没有任何问题执行输出.但是当涉及到客户端和服务器之间的通信时,客户端会立即断开连接.原因:
[XStreamClient Reader] WARN - 客户端断开连接(例外:com.thoughtworks.xstream.io.StreamException:无法创建XmlPullParser)
(此Exeption仅出现在客户端的gcj编译版本中.当我使用java解释器运行代码时 - 事情运行良好(但速度太慢^^)) - >具有挑战性的部分是我无法检索源代码发生此异常的代码,因为它位于客户端使用的预编译(Java类文件)库中.(我无法联系该图书馆的作者)
我想这个库会调用XppReader然后尝试创建一个XmlPullParser类并失败.
我通过解压缩它们并编译创建的*.class文件然后链接目标文件来绑定XStream(vers.1.4.3)库(以及其他所需的*.jars).这似乎也适用于所有其他图书馆.(我的操作系统= Ubuntu)
我已经做了什么来克服这个问题:我搜索了XStream/XmlPullParser和gcj,并用不同的版本替换了"xmlpull" - 和"kxml2"文件.但没有任何效果.你们中的任何人都知道可能是什么解决方案吗?
我发现XmlPullParser创建失败的原因是XmlPullParserFactory.newInstance函数无法找到带有/services/org.xmlpull.v1.XmlPullParserFactory文件的META-INF目录.这是因为我只编译并链接了*.jar的*.class文件.因此,只要我找到了将META-INF目录链接到该函数可以找到并访问它的可执行文件的方法,就应该解决问题.你们中的任何人都知道这样做的方法吗?