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 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

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

Remarks
記事中にソースコードが含まれる場合、ソースコードの再利用、改変、「オレのものにする」等は自由ですが、
ソースコードを利用して起こった問題は一切責任を負いません。(自己責任での利用となります。)