私はQt4Dotnet プロジェクトを使用して、もともと C# で記述されたアプリケーションを Linux および Mac に移植しています。Linux への移植はあまり手間がかからず、問題なく動作します。しかし、Mac (10.4 Tiger) はもう少し頑固です。
問題は、アプリケーションを起動しようとすると、例外がスローされることです。例外は、com.trolltech.qt.QtJambi_LibraryInitializer
必要なすべてのライブラリを見つけることができないことを示しています。QtJambi ライブラリ初期化子はjava.library.path
VM 環境変数を使用します。この変数には、現在の作業ディレクトリが含まれます。必要なすべてのライブラリを作業ディレクトリに配置しました。MonoDevelop IDE からアプリケーションを実行しようとすると、イニシャライザは 1 つのライブラリをロードできますが、他のライブラリは「見つかりません」:
An exception was thrown by the type initializer for com.trolltech.qt.QtJambi_LibraryInitializer ---> java.lang.RuntimeException: Loading library failed, progress so far:
No 'qtjambi-deployment.xml' found in classpath, loading libraries via 'java.library.path'
Loading library: 'libQtCore.4.dylib'...
- using 'java.library.path'
- ok, path was: /Users/chin/test/bin/Debug/libQtCore.4.dylib
Loading library: 'libqtjambi.jnilib'...
- using 'java.library.path'
libQtCore.4.dylib
との両方libqtjambi.jnilib
が同じディレクトリにあります。コマンド プロンプトから実行しようとすると、イニシャライザでさえロードできませんlibQtCore.4.dylib
。
QtJambi v4.5.2 ライブラリで Qt4Dotnet v4.5.0 (現在最新) を使用しています。これが問題の原因かもしれませんが、Qt4Dotnet v4.5.2 を自分でコンパイルすることも、QtJambi v4.5.0 ライブラリを見つけることもできません。プロジェクトのページには、Mono フレームワークと互換性を持たせるために QtJambi のソース コードに何らかのパッチを適用する必要があると記載されていますが、このパッチはまだリリースされていません。このパッチを適用しないと、アプリケーションが奇妙な方法でクラッシュします (ライブラリ シーク エラー以外)。
元の QtJambi は必要なすべてのライブラリを完全にロードすることに注意する必要があるため、QtJambi を .Net ライブラリに変換するために使用される IKVM コンパイラの問題である可能性があります。
どうすればこの問題を克服できますか?