Проблема, связанная с C-заголовком в Visual Studio 2015, при попытке скомпилировать DOSBox SVN Daum в Windows 10

У меня возникают проблемы с заголовками, по-видимому, новые для VS2015 при попытке скомпилировать DOSBox SVN Daum в Windows 10. Примеры:

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 с включениями и https://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++

Я далеко не опытный программист на Си. Может кто-нибудь сказать, пожалуйста, чего не хватает? Спасибо!

0 ответов

У меня была такая же проблема с другой программой, и, посмотрев на нее, я наконец решил ее.

Если вы посмотрите на типичный cstdint из недавней Visual Studio вы заметите, что одна из них stdint.h. Здесь существуют фактические определения для различных типов. какойcstdint действительно - это экспорт определений в члены std пространство имен.

Однако здесь оказывается, что хотя первые строки с intXX_t составлен штраф, int_least_xx_tне надо. Это потому, что он неправильно читаетstdint.hфайл, в котором нет некоторых необходимых определений. Этот файл был написан людьми, которые хотели использовать именованные размеры до того, как MSVC поддержал их (они пришли с C99, который MSVC так и не смог поддержать, затем в C++11, который на тот момент MSVC предлагал поддержку).

Поскольку им нужны были только точные типы, они не писали определения для других типов. Теперь, когда MSVC поддерживает его, в этом файле совместимости нет необходимости. Однако, поскольку файлы проектов не были обновлены, компилятор найдет заголовок с плохой совместимостью вместо правильного, что приводит к этой ошибке.

Есть два способа решить эту проблему: изменить порядок включаемых папок, чтобы они получили тот, который вам нужен, или удалить плохие 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;
Другие вопросы по тегам