問題タブ [microsoft-runtime-library]

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 投票する
1 に答える
4834 参照

c++ - LNK4098 - GLFW を使用した「MSVCRT」競合

OpenGL を使用するプロジェクトに取り組んでいます。ただし、プロジェクトをビルドすると、「LNK4098 の解決: defaultlib 'MSVCRT' は ... と競合しています」というリンカの警告が表示されます。

私はこの警告について多くのことを読んでいて、私の GLEW が MSVCRT.dll を使用していることを Dependency Walker を使用して見つけました (それが「デフォルト ライブラリ」であるため、そうあるべきだと思います)。しかし、GLFW3.DLL を調べると、MSVCR120.DLL を使用していると表示されます。MSVCR120.DLL は、アプリケーションで競合を引き起こしていると思われる間違った DLL です。

そこで、ウェブサイトのソースコードを使って GLFW をゼロから構築してみます。プロジェクトで次の設定を編集しました。

  • ターゲット拡張子 -> 最初に .lib をビルドし、次に .dll をビルドします
  • プラットフォーム ツールセット -> v120
  • 構成タイプ -> 最初に .lib をビルドし、次に .dll をビルドします

次に、C/C++ -> コード生成 -> ランタイム ライブラリで、マルチスレッド DLL (/MD) を選択します。

コンパイルする前に、すべてを「リリース」に置きます。

すべてを再構築して再度検査すると、MSVCR120.dll を使用していると表示され、よく知られている LNK4098 競合が発生します。ここで何が間違っていますか?どうすれば競合を解決できますか? 前もって感謝します!

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

c++ - ランタイム ライブラリのバージョンをプログラムで取得する

実行時に c++ win32 アプリケーションのランタイム ライブラリのバージョンを取得することは可能ですか? MT 対 MTd 対 MD 対 MDd について話している。

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

c++ - CEF - MDd でテストをビルドする

現在、Chromium Embedded Framework (CEF) に基づくソフトウェアを実装しようとしています。

私が目指しているプラ​​ットフォームは Windows で、CEF Automated ビルドの最新バージョンを使用しています (この記事の日付現在)。

他のプロジェクトとの互換性の理由から、ランタイム ライブラリを/MDdおよび/MDとしてDebugおよびReleaseとしてそれぞれ指定する必要があり、提供されたサンプルをテストビルドすることにしました。CEF ガイドに示されているように、make ルーチンも使用しました。

そのために、ファイルcef_variables.cmakeを変更しました。特に、CEF_COMPILER_FLAGS_DEBUGCEF_COMPILER_FLAGS_RELEASEを次のように変更しました。

デフォルトのフラグは/MTdおよび/MTです。

デフォルトのフラグを使用する場合、問題はないようで、libcef_dll_wrapper プロジェクトとcefclientプロジェクトの両方が正常にコンパイルされます。

ただし、変更されたフラグを使用すると、libcef_dll_wrapper をビルドすることしかできませんが、cefclientビルドすると次のリンカー エラーがスローされます。

cmake コマンドの出力は次のとおりです。

ここで何が欠けていますか?マクロ変数を変更すると、すべてのプロジェクトが同じ設定を使用してビルドされ、エラーなしでコンパイルされると思いました。

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

c++ - MTdに設定してもMDdでコンパイルするプロジェクト

他のいくつかの静的プロジェクトに依存する exe をコンパイルしようとしています。MTd一部のプロジェクトは、ランタイム ライブラリ オプションでコンパイルされた OpenCV ライブラリに依存しています。私がしたことは、すべてのプロジェクトのランタイム ライブラリをMTd(ビジュアル スタジオ プロジェクトのプロパティのランタイム ライブラリ オプションで) 同様に設定することです。静的プロジェクトのみをコンパイルするとすべてうまくいきますが、exe ファイルをコンパイルすると次のようなエラーが発生します。

Transform_Static.lib (Transform.obj : error LNK2038: mismatch detected for 'Runtime Library' value 'MDd_DynamicDebug' dosen't match value 'MTd_StaticDebug' in Math_UT.obj

exe プロジェクトのリンカー依存関係からライブラリを追加/削除しようとしましたが、何も変わりません。他に何ができますか? ありがとう。

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

visual-c++ - VS2019 で CMakeSettings.json 変数を有効にする方法

初めて VS2019 で CMake を試していますが、その仕組みについて混乱しています。これは、msvc_x64_x64 ツールセットを使用した Windows 10 です。

動的リンクを使用したい静的ライブラリを作成する CMake プロジェクトがあります。デフォルトの CMakeSettings.json には変数が含まれています

CMAKE_CXX_FLAGS_DEBUG = /MDd /Zi /Ob0 /Od /RTC1

CMakeLists.txt はこれをオーバーライドしないので、私には良さそうです。

ただし、生成された lib ファイルは静的リンクを使用しているようで、別のプロジェクトが /MDd ではなくランタイム ライブラリ /MTd を使用してリンクできます。

そのため、別の場所からコンパイラ フラグを取得して CMakeSettings.json 内のフラグを無視しているか、CMAKE_CXX_FLAGS_DEBUG 以外の変数があるようです。

CMakeSettings.json 変数を使用するにはどうすればよいですか?

これが現在の CMakeSettings.json ファイルです