Visual Studio 2013 中的 POSIX 标头(来自 MinGW 项目)

Posted

技术标签:

【中文标题】Visual Studio 2013 中的 POSIX 标头(来自 MinGW 项目)【英文标题】:POSIX Headers (from MinGW project) in Visual Studio 2013 【发布时间】:2014-12-23 16:28:58 【问题描述】:

(继续:Porting from Code::Blocks to Visual Studio 2010 - 如果它违反 StackExchange 的格式规则,我将删除它)

我正在尝试移植一个开源 Code::Blocks 项目,该项目最初使用 MinGWGCC TDM-1 4.7.2(不支持较新版本),到 Visual Studio 2013(注意:我为上述问题从 2010 年切换到 2013 年)。该代码使用 1998 ISO C++ 标准并使用各种附加实用程序,如 SDL2OpenGLZlibLua 和其他人。

主要问题是,该项目包含一些VS没有的库; 所以我想问一下是否有人知道这些是否是仅限 Unix 的库、我忽略的项目中包含的实用程序的库或我的 VS 安装由于某种原因缺少的库,主要是如果它们可以修复,替换为 VS 等价物或从某处下载而无需先大量移植/编辑代码本身。

特别是,在当前的构建尝试中(我没有扫描所有项目源文件以查找其他错误)缺少的库是:

unistd.h(*) cpuid.h sys/time.h

(*)编辑:我环顾四周,发现 unistd.h 可以可能替换为 io.h或者使用原始 Unix 库的自定义子集,所以我也会尝试这些选项。


EDIT2:显然,它们都是 Unix (POSIX) 库,据我了解,它们与 MSVC 编译器根本不兼容,即使它们被强制包含在项目。

我还尝试将 Visual Studio 项目设置为使用 MinGW 作为自定义编译器,但我不仅无法使其正常工作,而且我读到 VS 无法解析来自 的调试信息GCC-编译的二进制文件,这是我首先想移植到 VS 的两个主要原因之一。

我也读过这个名为VisualGDB 的插件;有人知道吗? VS 是否可以编译和调试 MinGW 程序?

【问题讨论】:

看来你惹的麻烦太多了。基本上,gcc 遵循 POSIX,而 MSVC 遵循 MS ;) 我知道 MS API 有自己的系统信息和计时例程,很少类似于 POSIX。 MinGW 已经创建了这样的端口。无论如何,你能列出缺失的例程吗?我的意思是删除不支持的包含并列出未解决的函数。 我尝试删除其中一些,但我遇到了另一个主要问题:该项目包含与 GNU 兼容的 OpenAL、Freetype2 和 Lua 的修改版本(其中一些部分是 POSIX,有些不是t),我真的不想搞砸。我想我现在宁愿尝试 VisualGDB,或者坚持使用 C::B 以获得完全兼容性。 另外,来自意大利的大家圣诞快乐! :) 【参考方案1】:

是的,我尝试了 VisualGDB 扩展,它几乎解决了所有问题。 MSVC 和 MinGW 讨厌彼此的废话,我真的无能为力。

【讨论】:

【参考方案2】:

我知道这是一篇旧帖子,但与时间相关的标题也有类似的问题。这是我的解决方案。

This repository 提供了这些时间相关功能的实现。他们似乎还有一个自动导出的 github 项目,其中包含相同的文件,以防原始存储库链接停止工作:https://github.com/zhouheng/madp-win/tree/master/src/include/sys

我将他们的三个文件:time.h、times.h 和 times.cpp,放到我的项目目录中名为“sys/”的文件夹中,然后替换所有对:

#include <sys/time.h>

使用:

#include "sys/time.h"

用于本地文件参考。到目前为止,我还没有遇到任何问题。请注意,这不是我的代码,代码的原始许可证是 LGPL。

【讨论】:

以上是关于Visual Studio 2013 中的 POSIX 标头(来自 MinGW 项目)的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2013 中的默认模板项目崩溃

克服 Visual Studio 2013 中的 decltype 问题

Visual Studio 2013 中的“无法导入 ActiveX 控件”

Visual Studio 2013 中的 LoadTestException 错误

Visual Studio 2013 中的 Resharper 8.0

C++ 中的溢出数字 (Visual Studio 2013)