2017-10-25 8 views
0

C++で開発された(コンソール)アプリケーションで、私たちが開発したFramework.dllに新しい関数を追加する必要があります。フレームワークのこの新しい関数は、私たちに提供される静的ライブラリのクラスを使用します。DLLでスタティックライブラリを使用

私は静的なlibを私たちのフレームワークにリンクしました。その後、私はフレームワークのコードを静的ライブラリのクラスを使用するように編集し始めました。フレームワークはまだ警告なしで構築されます。 Framwork.dllを使用するメインアプリを実行すると、アプリは起動しません。イベントはmain()には行きません。それは空のプロンプトにロックし、無限に待っています。

静的なライブラリを直接アプリケーションにリンクすると、問題はありません。しかし、それは私がそれを使いたいところではありません。

誰かが私が間違っていることを知っていますか?

+0

問題はおそらく静的ライブラリとは無関係です。あなたはaVastを使っていますか?もしそうなら、それを無効にして、やり直してください。 – drescherjm

+0

私にとっては、https://stackoverflow.com/questions/31446363/proper-way-to-link-static-libraries-with-dllと同じことをしようとしています。 – sandwood

+0

はい、それです。そして、基本的にはそれが私のやり方です。すなわち、.libをDLLプロジェクトにリンクします。もし私がそれをしていないと、DLLプロジェクトは(未解決の外部のために)とにかくビルドされませんでした。 – NonoxX

答えて

0

Hans Passantのおかげで、私はDllMainを使ってデバッグしました。そして、はい、それはデッドロックでした。問題は、静的なlibをDLLに使用することに直接関係していませんでした。

静的ライブラリには、CRTDLLmainに初期化されたスタティックシングルトンがいくつかあります。私の実装では、C++アトムフェンス(http://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/のように)を使用して、ダブルチェックされたロックパターンに従います。しかし、C++ 11(https://github.com/weidai11/cryptopp/issues/372)ではうまく動作しません。 私はそれをテストするための簡単な回避策をコーディングしました。私はlibメーカーに連絡して、固定バージョンが可能かどうかを確認します。

関連する問題