3

dllを他のdllへの依存関係とリンクしています。プロジェクトの64ビットバージョンをリンクするのに問題があります。32ビットバージョンでは、mingw32を使用する限りすべて問題ありません。しかし、依存するdllの64ビットバージョンとmingw-w64に切り替えると、次のように表示されます。

c:/.../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible .\lib\native/libblabla.dll when searching for -llibblabla

'libblabla'は私が依存しているライブラリです。私はそれが64ビットバージョンであり、互換性があるはずだと絶対に確信しています。mingwのバグですか?

また、libファイルを使用してリンクしようとしましたが、libも互換性がないと見なされ、dlltoolによって生成されたものにはインポートテーブルが生成されていません!

私はこれで完全に立ち往生しています。ありがとうございました。

4

1 に答える 1

2

まず、いくつかの考えられる誤解を邪魔にならないようにするために:

  1. GCC / ldは、32ビットDLLおよび.lib/.aインポートおよび静的ライブラリにリンク(適切にエクスポート)できます。
  2. GCC / ldは、適切にエクスポートされた64ビットDLLにリンクできるか、.aインポートまたは静的ライブラリにリンクできる必要がありますが、64ビット.libファイルにはリンクできません。
  3. あなたは構築/リンクしていません-m32よね?

「適切にエクスポートする」とは、DLLで実行したときに、エクスポートされたシンボルを表示することを意味しdumpbin /exportsます。nm -t

あなたが試すべきこと:

  1. binutilsへの直接呼び出しではなく、gccへの呼び出しを介してビルドします。オプション-shared -o name.dll -Wl,--import-lib, libname.dll.aはあなたが始めるのに役立つはずです。

  2. MinGW-w64 gendefmingw-w64-toolsSVN /ソースのディレクトリにあります)を使用して、インポートライブラリを作成できる.defファイルを生成します。

これらがインポートライブラリにシンボルを生成しない場合、シンボルをエクスポートしていません。エラーメッセージにdllが32ビットであると表示されているため、これは驚くべきことです。filedllに対するMSYS/Cygwinのコマンドは何を返しますか?

于 2011-10-12T10:00:22.597 に答える