0

GTK+ でビルドされたプログラム (GIMP、gnuplot、または GTK+ でビルドしているアプリなど) を実行しようとすると、次のエラーが表示されます。

エラーメッセージ

(テキストには、「プロシージャ エントリ ポイント libintl_setlocale がダイナミック リンク ライブラリ intl.dll に見つかりませんでした」と書かれています。)

エラーは常に「libintl_setlocale」であるとは限りません。アプリケーションが実際に呼び出そうとしているプロシージャによって異なります。

4

1 に答える 1

1

この問題は、アプリケーションが必要とするものとは異なるバージョンのintl.dllライブラリが使用されている可能性があります。GTK+ で構築されたアプリケーションには、このライブラリのコピーが付属していることが多く、そのコピーは機能するはずですが、Windows がそれをロードするわけではありません。

アプリケーションにライブラリのコピー付属している場合、アプリケーションbinディレクトリに配置されている可能性があります (たとえば、GIMP v2.0 では、 にあります{GIMP_DIR}/32/bin/intl.dll)。したがって、アプリケーションを実行するには、これが OS がアプリケーション用にロードするライブラリであることを確認する必要があります。

これにはさまざまな方法があります。

  1. 最も簡単な方法は、ライブラリのコピーをアプリケーションの実行可能ファイルと同じディレクトリに直接置くことです。Windows は常に、最初に実行可能ファイル[ref]と同じディレクトリでDLL を検索します。これの利点は、異なるバージョンのライブラリに依存している可能性のある他のアプリケーションに影響を与えないことです。

  2. または、正しく読み込まれていないライブラリのバージョンを追跡することもできます。たとえば、Dependency Walkerを使用してアプリケーションを検査し、どのファイルがロードされているかを調べますinit.dll。ファイルを見つけたら、このファイルの代わりに目的のコピーが確実にロードされるようにする方法を見つける必要があります。たとえば、目的のコピーを、ここで説明されているライブラリ検索パスの上位の場所に配置します。これには、望ましくないファイルを目的のファイルに置き換える必要がある場合があります。DLLの置き換えは慎重に行ってください。DLL を使用する他のアプリケーションが壊れる可能性があります。一般的、広く使用されている DLL は下位互換性を維持しているため、このエラーが発生した場合は、見つかったライブラリのコピーが古いバージョンであり、目的のコピーが引き続き機能する新しいバージョンであることを意味している可能性があります。ただし、これは保証にはほど遠いため、DLL を上書きするのではなく、常に DLL のバックアップ コピーを保持してください。

于 2013-10-05T02:13:15.233 に答える