問題タブ [msvc12]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
461 参照

c++ - 静的ライブラリ内のシンボルの解決 -- いつ起こるのか?

エラー

unresolved external symbolプロジェクトのビルド中に依存関係を受け取りました。以前はこれが問題ではなかった理由を理解したいと思います。

背景情報

プロジェクトの依存関係グラフは次のようになります。

そのため、FreeImage のヘッダー ライブラリと静的ライブラリがあります。

FreeImaged.lib に対して明示的に静的にリンクして、gazebo_common をビルドします。

私は Gazebo を構築し、FreeImage.libとGazebo_common.libに対して明示的に静的にリンクします。

私はwpilibC++Simをビルドし、明示的にgazebo.libとgazebo_common.libに対して静的にリンクしますが、FreeImaged.libにはリンクしませ

私は自分の FRCUserProgram をビルドし、gazebo.lib、gazebo_common.lib、および FreeImaged.lib に対して明示的に静的にリンクします。

ただし、これを行うと、 から取得および取得unresolved external symbol __imp_FreeImage_InitializeされImage.cc.objます。

調べるためにやったこと

ここで、魔法のコマンドを使用して、シンボルではなくシンボルが含まれているdumpbin /SYMBOLSことを明確に確認できます。__imp_ は、DLL からインポートされることを意図した関数であることを示していることを知っています。ただし、すべてが静的にリンクされている必要があるため、そのシンボルを入れるものは何でも間違っていました。FreeImaged.libFreeImage_Initialize__imp_FreeImage_InitializeImage.cc.obj

これを修正するにはFRCUserProgram.exe、FreeImage の動的ライブラリにリンクするか、FREEIMAGE_LIB定義された変数を使用して Gazebo_common (したがって Image.cc.obj) を再構築します。これにより、シンボルの前に __declspec(import) と __imp_ が追加されなくなります。 .

何よりも、どこにも Dll はありません。存在しません。私はそれを持っていません。静的ライブラリを使用しようとしていますFreeImaged.lib。したがって、正しいシンボルが組み込まれるFREEIMAGE_LIBように、 を定義するのが正しいと思います。Image.cc.objもちろんこれは機能しますが、以前は問題にならなかった理由がわかりません!

質問:

これらのシンボルは、gazebo.exe ではなく FRCUserProgram.exe に対して解決する必要があるのはなぜですか?

0 投票する
1 に答える
4417 参照

c++ - Qt 5.5 のコンパイラとビルド キットを構成できない

クリーンな Windows 10、Visual Studio 2015、および Qt Creator 5.5 にインストールしたところです... msvc2012 を使用してコンパイルされたと思われるライブラリ (lib) ファイルに依存するソース コードがいくつかあります。

Qt は私のプロジェクトをコンパイルできず、選択したコンパイラは Qt 5.5 用にコンパイルできないと常に不平を言います...これに何時間も費やしましたが、まだ成功していません...誰か親切に私に何をすべきか教えてくれませんか? これが私の Qt ビルド オプションの写真です。 ここに画像の説明を入力

0 投票する
2 に答える
576 参照

c++ - Delphi: デバッガーで C dll 関数を呼び出すと、デバッガーなしで 15 秒、0.16 秒かかります。なんで?

私は次の設定をしています:

  1. Delphi XE5 で記述され、Debug 64 ビットでビルドされた Delphi コマンド ライン アプリケーション。
  2. Microsoft Visual Studio 2013 で記述され、リリース 64 ビットに組み込まれた AC dll。
  3. Delphi コマンド ライン アプリケーションは、C dll の関数を呼び出します。

予想外のこと:

  1. Delphi XE5 IDE 内で Delphi コマンド ライン アプリケーションをデバッグする場合、C dll 関数の呼び出しに 15 秒かかります。
  2. 同じ Delphi コマンド ライン アプリケーションを直接(IDE やデバッガを使用せずに)起動すると、C dll 関数の呼び出しに 0.16 秒かかります。

Delphi コマンド ライン アプリケーションのソース コード:

C dll ソース コード:

Delphi + C dll ソース コード: DelphiCplibraryCall.zip

ランタイム比較:

  • 最初のコンソール: IDE でデバッグする場合
  • 2 番目のコンソール: IDE なしで起動する場合

ランタイム比較

何らかの理由で、Delphi Debugger は C dll 関数の呼び出しを大幅に遅らせ、デバッグをほとんど不可能にしているようです。

この問題の原因や回避方法を知っている人はいますか? どうもありがとう。

編集:説明されている動作が Delphi IDE とデバッガーにまったく制限されていないことを確認できます。この問題は、次の場合にも発生します。

  1. Release の Microsoft Visual Studio 2013 で C dll をビルドします。
  2. そして、Visual Studio 2013 で C dll を呼び出すコマンド ライン実行可能ファイルをビルドしてデバッグします。

つまり、C dll リリース ビルド関数の実行時間は、デバッガが接続されているかどうかによって異なります。

delete values;また、デバッガーが存在するとすぐに時間がかかるのは unordered_map ( ) の削除であることも確認できます。

0 投票する
4 に答える
4711 参照

c++ - std::thread が DLLMain でデッドロックを引き起こす

つまり、これが私が話していることです: std は複雑です。

VS2013 では、この単純なプログラムでデッドロックが発生します。

DLLMain でスレッドを作成するのは完全に間違っていますか? それは真実ではない。Microsoft のドキュメント「DLL を作成するためのベスト プラクティス」から: 「スレッドの作成は、他のスレッドと同期しない場合に機能する可能性があります」。したがって、CreateThread は機能し、_beginthreadex は機能し、boost::thread は機能しますが、std::thread は機能しません。これはコール スタックです。

さて、 std::thread は「他のスレッドと同期」します。

しかし、なぜ ?

これがVS2015で二度と起こらないことを願っています。まだテストしていません。

0 投票する
0 に答える
55 参照

windows - コードを実行している MSVC プロファイラーを検出するにはどうすればよいですか?

Windows API に似たものを探していますIsDebuggerPresent()が、コードが MSVC2013 でプロファイリングされているかどうかを判断します。そのような API は存在しますか、それとも別の方法がありますか?

0 投票する
1 に答える
2472 参照

c++ - Visual Studio で gcc コードをコンパイルすると、エラー C3646: '__attribute__': unknown override specifier が発生する

次のエラーが表示されます。

エラー C3646: '__attribute__': オーバーライド指定子が不明です

コード:

完全なエラー:

1>c:\program files\indri\indri 5.9\include\indri\greedy_vector(52): エラー C3646: '__attribute__': 不明なオーバーライド指定子

追加情報: Visual Studio プロジェクトで indri.lib を使用しようとしています。