7

これと同様の質問がすでに出されていることは知っていますが、この問題を何時間も修正できませんでした。

基本的に、コードを含む DLL とそれを呼び出すアプリケーションがあります。すべて正常に動作しますが、開発環境の外で 2 つを使用するとlibgcc_s_dw2 1.dll、コンピューターに が見つからないため、プログラムを開始できないと表示されます。

開発用コンピューターではないことを考えると、これは十分に公平です。そのため、配布用にコンパイラ フラグ " -static-libgcc -static-libstdc++" を追加しました。私はdllとアプリケーションに対してこれを行いました。

しかし、アプリケーションをコンパイルすると、次のエラーが発生します。

「`_Unwind_Resume' の複数定義」

これは、dll とアプリケーションの両方に静的ライブラリが組み込まれているためだと思いましたが、そうです。ただし、両方に静的ライブラリが組み込まれていない場合、プログラムはエンド ユーザーのマシンでは実行されません。

mingw ライブラリに依存していない状態で、このエラーを取り除くにはどうすればよいですか? 私の IDE は Code::Blocks です。

デビッド

編集: dll にリンクするアプリケーションをビルドするときのビルド ログは次のとおりです。

c:/mingw/bin/../lib/gcc/mingw32/4.6.2/libgcc_eh.a(unwind-dw2.o):(.text+0x298c): multiple definition of `_Unwind_Resume'

..\EquilibriumEngine\bin\Release\libEquilibriumEngine.dll.a(d000015.o):(.text+0x0): first defined here

collect2: ld returned 1 exit status

Process terminated with status 1 (0 minutes, 0 seconds)

2 errors, 0 warnings
4

2 に答える 2

1

リンカーフラグ-staticのみで繰り返してください。ただし、(可能であれば)libgcc_s_dw2 1.dllを exe に含めて、両方を配布してください。MinGW/binフォルダからdllを取得できます。

-static-libgccまた、コンパイラーに追加しなかったことを確認してください。ただし、リンカーのフラグです。

于 2013-02-05T14:50:27.523 に答える