Linux中有STDCALL吗?

我试图将一个Windows应用程序移植到Linux。 这个appplication用__stdcall属性标记了一些函数。 然而,我有一个朋友告诉我,stdcall只用于windows,在linux中没有任何意义(但在Windows GCC中是否存在)。 我试图searchGoogle,并得到了一些结果表明,Linux中有stdacll。

那么……?

此外,对于GCC,我看到了2个实现: __attribute__((__stdcall__))__attribute__((stdcall)) (没有stdcall附近的下划线)。 哪一个是首选的(如果适用于Linux)?

谢谢!

Solutions Collecting From Web of "Linux中有STDCALL吗?"

最简单的解决方案是在Linux上只将__stdcall定义为无条件。

以下是MSDN上__stdcall说明的链接: http : //msdn.microsoft.com/en-us/library/zxk0tw93( VS.80) .aspx

它只用于调用WinAPI函数。 要将这样的Windows应用程序移植到Linux上,除了将__stdcall定义为空之外,还需要更多的功能:

 #ifndef WIN32 // or something like that... #define __stdcall #endif 

您还需要调用特定于Linux的API函数而不是Win32 API函数。 取决于Win32 API的特定部分和应用程序的大小(代码量),它可以处于适度困难和艰巨的任何地方。

哪些特定的功能被标记为__stdcall?

事实上,GCC的Windows端口必须有__stdcall,因为它应该能够生成符合Win32平台的代码。 但是由于在Linux下只有一个标准的调用约定,并且与默认的编译器输出一致,所以这个语句是不需要的。

你的应用程序不能在Linux下编译的原因几乎肯定是由于它引用了在Linux下没有定义的Win32 API函数 – 你需要找到合适的Linux对应程序。 Win32 API和Linux GLibc API-s有很大的不同,不能轻易替换。

将应用程序移植到Linux的最简单方法可能是使用Wine,也就是修改Windows代码,使其在Linux下的Wine下顺利运行。 即使是最复杂的应用程序,如现代电脑游戏,也可以在Linux下运行。

当然,如果你真的希望它在Linux下本地运行,那么移植是唯一的方法。