Mis*_*tyD 2 c++ gcc visual-studio-2010
我试图移植一个在Microsoft Visual Studio上正常运行的组件该组件包含以下代码
if ( SuperNode.someMethod == _T( "Hello" ) )
Run Code Online (Sandbox Code Playgroud)
当尝试在gcc cygwin中构建代码时,我收到以下错误
error: '_T' was not declared in this scope|
Run Code Online (Sandbox Code Playgroud)
现在在visual studio中_T指向tchar.h
哪个有这样的东西
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决gcc cygwin这个问题?我会在Windows上运行它
正如在cygwin上找不到的tchar.h所讨论的那样,Cygwin(试图在Windows上模拟POSIX编程接口的兼容层)与Unix实现的共同点比它更多.特别是,它没有提供tchar.h.
你应该做些什么取决于你更大的目标:你为什么要尝试使用Visual Studio之外的其他东西来编译这个程序?以下是一些可能性:
您需要比VS2010提供的更符合标准的C++实现,但您仍然希望构建本机Windows应用程序.阻力最小的路径可能是转而使用较新版本的Visual Studio; 这些"Express"版本都是免费的啤酒.您还可以尝试MinGW,它是一个生成本机 Windows应用程序的GCC后端,以及用于Windows的Clang.
您需要在ABI级别与(例如,将DLL加载到)使用MinGW编译的C++程序进行互操作.在这种情况下,您还应该使用MinGW.(Clang-for-Windows应该与Visual Studio兼容,因此在这种情况下它不起作用.请注意,如果涉及的ABI 完全在普通C中指定,那么加载Visual Studio应该没有问题编译后的DLL到MinGW编译的程序中,反之亦然.)
这是Unix端口的第一阶段(注意:为了讨论的目的,MacOS X算作Unix),或者你需要在ABI级别与Cygwin程序进行互操作......这意味着你必须移植到Unix.在这种情况下,阶段零需要停止使用tchar.h.
我的意思是,回到你的Visual Studio版本,然后找到代码中的每一个地方,使用中定义的任何tchar.h(_TCHAR,_T,_TEXT,_tcs*,可能其他人),并对其进行更改为使用普通的char,或wchar_t酌情和相关的字符串 - 文字语法和函数.你也应该戒掉自己离开通用(既不A也不W核心Windows API的后缀)的变体在同一时间.我相信你可以定义一个宏,导致windows.h根本不提供通用API,但我不记得它是什么,现在无法在MSDN上找到它.
在这样做时请记住,Unix更喜欢在char/中使用UTF-8编码的文本std::string,而不是在wchar_t/ std::wstring等中使用UTF-16文本.根据我的经验,跨平台应用程序通常最符合Unix惯例除了直接与Windows API对话的函数,它只使用W该API 的变体,然后在那里来回转换.(并且您需要创建一个兼容性层并将所有代码隔离在那里并安排尽可能少的代码.)