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 项目,该项目最初使用 MinGW 和 GCC TDM-1 4.7.2(不支持较新版本),到 Visual Studio 2013(注意:我为上述问题从 2010 年切换到 2013 年)。该代码使用 1998 ISO C++ 标准并使用各种附加实用程序,如 SDL2、OpenGL、Zlib、Lua 和其他人。
主要问题是,该项目包含一些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 中的 decltype 问题
Visual Studio 2013 中的“无法导入 ActiveX 控件”
Visual Studio 2013 中的 LoadTestException 错误