ランタイムライブラリをマルチスレッドDLLにしないと「_round.hが見つかりません」と出て、数学関数が使えない

スクナ 0 評価のポイント
2024-09-04T14:47:49.04+00:00

初学者です。

OS:Windows11

バージョン:17.11.2

インストール済みワークロード:C++によるデスクトップ開発、C++によるゲーム開発(オプションはなにもいじらず)

ランタイムライブラリを/MD、/MDdから/MT、/MTdにすると、math.hのRoundやSinなどの数学関数を使ったときに、

「ソースファイルの検索:_round.h」というウィンドウが出て、

キャンセルボタンを押すと、「ソースが見つかりません」というタブに、

・_round.hを手動で見つける

・逆アセンブリの表示

・詳細情報

というものが出てしまい、計算されません。

/MD、/MDdだと正常に計算されます。

例えば、Visualstudio2022Communityにて、

新しいプロジェクトの作成→C++コンソールアプリにて新規ソリューションを作成し、

#include <iostream>

#include <math.h>

int main()

{

    double i = 0.8;

    std::cout << round(i * 11);

}

のプログラムを起動すると、Roundの行で上記症状が出ます。

Visualstudio の修復、再インストールも試しましたが変わりませんでした。

これは何が原因なのでしょうか?

Visual Studio
Visual Studio
Windows、Web、モバイル デバイス用のアプリケーションを構築するための統合開発ツールの Microsoft スイートのファミリ。
75 件の質問
{count} 件の投票

2 件の回答

並べ替え方法: 最も役に立つ
  1. とっちゃん 625 評価のポイント MVP
    2024-09-05T13:11:33.0633333+00:00

    デバッガで round 関数にステップインした時に発生していませんか?

    round 関数にステップインせず、ステップオーバーすればソースを聞かれることはないと思います。

    自分の環境でも試してみましたが、_round.h をシンボルサーバーからも落とせなかったので、公開されていないようです(理由は不明)。

    ダイアログをキャンセルして、ステップアウトする(右クリックからソースを開くを呼び、そのままステップオーバーでも次に行くはず)と、デバッグを継続できると思います。

    0 件のコメント コメントはありません

  2. Raina Zhao - MSFT 2,685 評価のポイント Microsoft ベンダー
    2024-09-06T02:18:12.8766667+00:00

    スクナさん、ご返信いただきありがとうございます。

    この問題は、おそらくシンボルファイルに関係していると思われます。

    エラーメッセージによると、VSが該当するシンボル (.pdb) ファイルを読み込むか見つけることができなかったため、ウィンドウが表示されたようです。

    シンボルに関連するキャッシュやキャッシュファイルを誤って削除したことはありませんか?

    たとえば、「デバッグ」>「オプション」>「シンボル」での設定を誤って変更したり、「C:\Users\username\AppData\Local\Temp\SymbolCache」ディレクトリ内のキャッシュシンボルを削除してしまったりしたこと。

    まず、VSを終了し、「Windowsの検索ボックス」で「Developer Command Prompt for VS 2022 Community」を検索して開きます。そして、「devenv /ResetSettings」コマンドを実行します。続いて、VS 2022が自動的に起動するので、「デバッグ」>「オプション」>「シンボル」に進み、以下のスクリーンショットのように、「Microsoftシンボルサーバー」を選び、「除外されていないすべてのモジュールを読み込む」にチェックを入れて、「OK」をクリックします。最後に、プロジェクトを再度開き、リビルドして実行してください。

    symbols


    役に立った回答には「回答を受け入れる」と「いいね!」を押してください。さらに質問がある場合は、「コメント」を追加してください。注意:Q&Aからメール通知を受け取りたい場合には、ドキュメントの手順に基づき、メール通知を有効にしてください。

    0 件のコメント コメントはありません

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。