問題タブ [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.
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 競合が発生します。ここで何が間違っていますか?どうすれば競合を解決できますか? 前もって感謝します!
c++ - ランタイム ライブラリのバージョンをプログラムで取得する
実行時に c++ win32 アプリケーションのランタイム ライブラリのバージョンを取得することは可能ですか? MT 対 MTd 対 MD 対 MDd について話している。
c++ - CEF - MDd でテストをビルドする
現在、Chromium Embedded Framework (CEF) に基づくソフトウェアを実装しようとしています。
私が目指しているプラットフォームは Windows で、CEF Automated ビルドの最新バージョンを使用しています (この記事の日付現在)。
他のプロジェクトとの互換性の理由から、ランタイム ライブラリを/MDdおよび/MDとしてDebugおよびReleaseとしてそれぞれ指定する必要があり、提供されたサンプルをテストビルドすることにしました。CEF ガイドに示されているように、make ルーチンも使用しました。
そのために、ファイルcef_variables.cmakeを変更しました。特に、CEF_COMPILER_FLAGS_DEBUGとCEF_COMPILER_FLAGS_RELEASEを次のように変更しました。
デフォルトのフラグは/MTdおよび/MTです。
デフォルトのフラグを使用する場合、問題はないようで、libcef_dll_wrapper プロジェクトとcefclientプロジェクトの両方が正常にコンパイルされます。
ただし、変更されたフラグを使用すると、libcef_dll_wrapper をビルドすることしかできませんが、cefclientをビルドすると次のリンカー エラーがスローされます。
cmake コマンドの出力は次のとおりです。
ここで何が欠けていますか?マクロ変数を変更すると、すべてのプロジェクトが同じ設定を使用してビルドされ、エラーなしでコンパイルされると思いました。
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 プロジェクトのリンカー依存関係からライブラリを追加/削除しようとしましたが、何も変わりません。他に何ができますか? ありがとう。
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 ファイルです