3

Windows 10 で DOSBox SVN Daum をコンパイルしようとしているときに、明らかに VS2015 にとって新しいヘッダー関連の問題が発生しています。例:

Severity    Code    Description Project File    Line    Suppression State
Error (active)      the global scope has no "int_least8_t"  dosbox  c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cstdint  23  
Error   C2039   'int_least8_t': is not a member of '`global namespace'' dosbox  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\cstdint  23  

私の検索では、この種の問題がプロジェクトで発生していることがわかりましたが、修正できませんでした。

特に、VisualStudio 2015 RC Issue with includeshttps://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/を読み、AppData\Local の内容を変更しました。 \Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props へ:

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets">
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <IncludePath>D:\dev\include;$(UniversalCRT_IncludePath);$(IncludePath)</IncludePath>
    <LibraryPath>D:\dev\lib;$(UniversalCRT_LibraryPath_x86);$(LibraryPath)</LibraryPath>
  </PropertyGroup>
  <ItemDefinitionGroup />
  <ItemGroup />
</Project>

しかし、運はありません。:(

画像:

VC++ ディレクトリ VC++ 標準ヘッダー関連のコンパイル エラー

私は経験豊富な C プログラマーではありません。何が足りないのか誰か教えてください。ありがとう!

4

1 に答える 1

2

別のプログラムで同じ問題が発生しましたが、インクルードを確認した後、最終的に解決しました。

最近の Visual Studioの典型的なものを見ると、cstdint1 つのインクルードがstdint.h. これは、さまざまなタイプの実際の定義が存在する場所です。名前空間のメンバーになるようcstdintに定義をエクスポートします。std

ただし、最初の行はintXX_t正常にコンパイルされていますが、コンパイルされてint_least_xx_tいないことがわかります。これは、stdint.h必要な定義の一部が含まれていない間違ったファイルを読み取るためです。そのファイルは、MSVC がサポートする前に名前付きサイズを使用したいと考えていた人々によって作成されました (MSVC が実際にサポートすることはなかった C99 に付属していましたが、その時点で MSVC がサポートを提供していた C++11 でした)。

正確な型だけが必要だったので、他の型の定義は書きませんでした。MSVC がサポートするようになったので、この互換性ファイルは必要ありません。ただし、プロジェクト ファイルが更新されていないため、コンパイラは正しいヘッダーではなく、不適切な互換性ヘッダーを検出し、このエラーが発生します。

これを解決するには 2 つの方法があります。インクルード フォルダーの順序を変更して目的のファイルを取得するか、不良stdint.hファイルを削除します。Visual Studio を使用してファイルを開くことができるため、簡単に見つけることができ#includeます。あなたの場合、ファイルはsrc/platform/visualc/ディレクトリにあります。

補遺: これは私の欠陥のあるstdint.hファイルです

#pragma once

/* a minimal set of C99 types for use with MSVC */

typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef __int64 int64_t;

typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;
于 2019-07-18T07:37:00.557 に答える