2015年1月7日水曜日

インポートライブラリの件

インポートライブラリは厄介です。。。

1>textsearch_ja.obj : error LNK2001: 外部シンボル "__imp_mecab_new" は未解決です。

結論
x64  __imp_mecab_new
x86  __imp__mecab_new

ーーー
という訳で、ちょっと確かめてみます。

dumpbin /exports libmecab.dll | find /i "mecab_new"
         97   60 00027540 mecab_new
         98   61 0004F450 mecab_new2

dumpbin /exports libmecab.lib | find /i "mecab_new"
                  _mecab_new
                  _mecab_new2

DependencyWalkerで見ると、「mecab_new」

Cygwinで:

$ objdump.exe -t Program\ Files\ \(x86\)/MeCab/sdk/libmecab.lib | grep "mecab_new"
[  4](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 __imp__mecab_new
[  5](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 _mecab_new
[  4](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 __imp__mecab_new2
[  5](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 _mecab_new2

$ objdump.exe -p Program\ Files\ \(x86\)/MeCab/bin/libmecab.dll | grep "mecab_new"
        [  96] mecab_new
        [  97] mecab_new2

ーーー
という訳で、ちょっと作って確かめてみました。(後から注記:x86

extern "C" __declspec(dllexport) int ExportIt() {
 return 0;
}

dumpbin /exports OneDLL.dll | find "ExportIt"
          1    0 00001000 ExportIt = _ExportIt

dumpbin /exports OneDLL.lib | find "ExportIt"
                  _ExportIt

DependencyWalkerで見ると、「ExportIt」

Cygwinで:

$ objdump.exe -t Proj/Solution1/release/OneDLL.lib | grep "ExportIt"
[  4](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 __imp__ExportIt
[  5](sec  3)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 _ExportIt

$ objdump.exe -p Proj/Solution1/release/OneDLL.dll | grep "ExportIt"
        [   0] ExportIt

ーーー
(後から注記:x64

extern "C" __declspec(dllexport) int ExportIt() {
 return 0;
}

dumpbin /exports OneDLL.dll | find "ExportIt"
          1    0 00001000 ExportIt = ExportIt

dumpbin /exports OneDLL.lib | find "ExportIt"
                  ExportIt

DependencyWalkerで見ると、「ExportIt」

$ objdump.exe -p Proj/Solution1/x64/release/OneDLL.dll | grep "ExportIt"
objdump: Proj/Solution1/x64/release/OneDLL.dll: ファイル形式が認識できません
$ objdump.exe -t Proj/Solution1/x64/release/OneDLL.lib | grep "ExportIt"
objdump: OneDLL.dll: ファイル形式が認識できません
objdump: OneDLL.dll: ファイル形式が認識できません
objdump: OneDLL.dll: ファイル形式が認識できません
BFD: Proj/Solution1/x64/release/OneDLL.lib(OneDLL.dll): インポートライブラリ形式書庫のマシン型 (0x8664) は認識できますが扱えません
BFD: Proj/Solution1/x64/release/OneDLL.lib(OneDLL.dll): インポートライブラリ形式書庫のマシン型 (0x8664) は認識できますが扱えません
objdump: OneDLL.dll: ファイル形式が認識できません

ーーー
特に問題ないように思えます。。。

ところが、x64という可能性を考え、追試をするとビンゴ!

x64では、最初の _ 記号が取れているでは在りませんか。。。

0 件のコメント:

コメントを投稿