2016年11月26日

WIN64ビルドでcabinet sdkを使う

C++BuilderXE7で問題があったのでメモ
それ以降はもしかしたら直ってるかもしれない(直ってないかもしれない)

cabinet sdkをWIN64でビルドするとリンクエラーになる
[ilink64 エラー] Error: Unresolved external 'FDICreate' referenced from xxxx\WIN64\DEBUG\CABINET.O
[ilink64 エラー] Error: Unresolved external 'FDIDestroy' referenced from xxxx\WIN64\DEBUG\CABINET.O
[ilink64 エラー] Error: Unresolved external 'FDIIsCabinet' referenced from xxxx\WIN64\DEBUG\CABINET.O
[ilink64 エラー] Error: Unresolved external 'FDICopy' referenced from xxxx\WIN64\DEBUG\CABINET.O
libファイルのリンク方法は以下の通り
#if _WIN64
#pragma link "Cabinet.a" // リンクエラー
#else
#pragma link "Cabinet.lib" // OK
#endif
WIN32でビルドすると問題なく通る

幸いなことに最近の?RadStudioはPlatformSDKが入っているので、
FDI.HやCabinet.lib等のファイルを別途持ってくる必要なくビルドできる

で、問題はWIN64ですが、
clangに追従していないのか、付属のCabinet.aではダメっぽい
ちなみに、libファイルは以下の場所にある。
C:\Program Files (x86)\Embarcadero\Studio\15.0\lib\win32\release\psdk\Cabinet.lib
C:\Program Files (x86)\Embarcadero\Studio\15.0\lib\win64\release\psdk\Cabinet.a
以下のようにしてdllからCabinet.aファイルを作り直してそれを使えばいけた
mkexp Cabinet.a C:\Windows\System32\cabinet.dll
ただしこの方法は、なるべく古いOSのcabinet.dll(x64)で作成しないと、
古いOSで使えない場合がある
手元のcaibnet.dll(x64)は。。。
cabinet.dll 121.562KB 2016/07/16 20:42
Win10なのでとても新しい。。。。
XP(もしくはVista)の64bitあたりのcabinet.dllがほしいな。。。
posted by sanahi at 20:45| 滋賀 ☁| Comment(0) | TrackBack(0) | C++Builder | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください

この記事へのトラックバック