最終更新日: 2016-06-26 日 01:23
ホーム | 文書トップ | 目次

NTEmacsビルド(24.4) 依存DLLの特定

Table of Contents

参考

Dependency Walker http://www.dependencywalker.com/ によって依存DLLの特定ができるという情報もあったが、使い方がよくわからず、こちらはできていない

依存DLLの特定

MSYS2がインストールされていないPCでも動作可能にする為、依存するDLLを emacsのexeファイルがあるフォルダにコピーしたい。

DLLの特定を行う。

まず、Windowsの環境変数 PATH に入っているフォルダからは、dllが読み込まれてしまうので、一旦 MSYS2関連のパス(C:\msys32\usr\bin\;C:\msys32\mingw32\bin;)を取っ払って一旦ログオフする。

この状態だと、システムエラー「コンピューターに libwinpthread-1.dll がないため、プログラムを開始できません。この問題を解決するためには、プログラムを再インストールしてみてください。」が表示される。

よって、まずは、C:\msys32\mingw32\bin から libwinpthread-1.dll をbinにコピー。

この状態でも、以下の4点の問題がある。

  1. gif が表示できない
  2. jpg が表示できない
  3. png が表示できない
  4. ewwが使えない (libxml2 library not found という表示が出る)

まずは下記変数を評価し、必要な可能性のあるDLLをピックアップ

dynamic-library-alist
((xpm "libxpm.dll" "xpm4.dll" "libXpm-nox4.dll")
 (png "libpng16.dll" "libpng16-16.dll")
 (tiff "libtiff-5.dll" "libtiff3.dll" "libtiff.dll")
 (jpeg "libjpeg-8.dll")
 (gif "libgif-7.dll")
 (svg "librsvg-2-2.dll")
 (gdk-pixbuf "libgdk_pixbuf-2.0-0.dll")
 (glib "libglib-2.0-0.dll")
 (gobject "libgobject-2.0-0.dll")
 (gnutls "libgnutls-28.dll" "libgnutls-26.dll")
 (libxml2 "libxml2-2.dll" "libxml2.dll")
 (zlib "zlib1.dll" "libz-1.dll"))

これらをコピーする。

  • C:\msys32\mingw32\bin から
    • libXpm-noX4.dll
    • libpng16-16.dll
    • libtiff-5.dll
    • libjpeg-8.dll
    • libgif-7.dll
    • libgdk_pixbuf-2.0-0.dll
    • libglib-2.0-0.dll
    • libgobject-2.0-0.dll
    • libgnutls-28.dll
    • libxml2-2.dll
    • zlib1.dll
  • C:\msys32\bin から
    • libtiff3.dll
    • librsvg-2-2.dll
  • 存在しない
    • libxpm.dll
    • xpm4.dll
    • libpng16.dll
    • libtiff.dll
    • libgnutls-26.dll
    • libxml2.dll
    • libz-1.dll

これにより、1. は解決。

これ以外は、おそらく、C:\msys32\mingw32\bin 以下のDLLに依存すると推測。 まずは、C:\msys32\mingw32\bin のみにパスを通して試してみる。 1〜4 全てOK。

なので、再度パスを外し、C:\msys32\mingw32\bin 以下のDLLを全てコピーしてみる。 これでもOK。まず、これは間違いない。

なので、DLLをちょっとずつ外していき、その都度emacsを起動して、1/2/3/4の現象がどうなるかを見ていく。

1個ずつだとさすがに時間がかかりすぎるので、10個ずつやっていく。 すると、ある10個を外すと、2,3,4が一気にNGになる。 その10個が下記。

  • libfribidi-0.dll
  • libgadu-3.dll
  • libgailutil-18.dll
  • libgailutil-3-0.dll
  • libgcc_s_dw2-1.dll
  • libgcrypt-20.dll
  • libgdbm-4.dll
  • libgdbm_compat-4.dll
  • libgdk-3-0.dll
  • libgdk_pixbuf-2.0-0.dll

そのうち、すでにある、libgdk_pixbuf-2.0-0.dll を外す。 残り9個。

  • libfribidi-0.dll
  • libgadu-3.dll
  • libgailutil-18.dll
  • libgailutil-3-0.dll
  • libgcc_s_dw2-1.dll
  • libgcrypt-20.dll
  • libgdbm-4.dll
  • libgdbm_compat-4.dll
  • libgdk-3-0.dll

今度は1個ずつ入れていき、確認。 libgcc_s_dw2-1.dll によって、2.が解決。 確かに、明らかにこいつは怪しそう。。

3.と4.に必要なDLLを特定する。 やりにくくなってきたので、これまで特定したDLLはパスの通ったディレクトリに置いておき、10個ずつ削除作戦を行う。

途中で、libxml2 が libiconv-2.dll に依存していることに気付く。 これにより、4.がOK。

また、3.は単純なミスで、入れたつもりで libpng16-16.dll を入れてなかった。 これにより、3.もOK。

再度確認してみると、2.と3.と4. が libgcc_s_dw2-1.dll に依存している。

MSYS2のライブラリの多くが、これに依存しているのかもしれない。

ホーム | 文書トップ | 目次
Created by Emacs 27.1 (Org mode 9.3)