Проблема, связанная с 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>
Не повезло, хотя.:(
Изображений:
Я далеко не опытный программист на Си. Может кто-нибудь сказать, пожалуйста, чего не хватает? Спасибо!
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;