Bre*_*int 18 c++ linux porting stdcall
我正在尝试将Windows应用程序移植到Linux.这个appplication用__stdcall属性标记了一些函数.但是,朋友告诉我,stdcall仅用于Windows并且在linux中没有任何意义(但是Windows GCC中存在DOES).我试图在谷歌搜索这个,并得到一些结果表明在Linux中存在stdacll.
所以......?
此外,对于GCC,我看到了2个实现:__attribute__((__stdcall__))和__attribute__((stdcall))(没有stdcall附近的下划线).哪一个是首选(如果适用于Linux)?
谢谢!
And*_*nin 10
这是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
Run Code Online (Sandbox Code Playgroud)
您还需要调用特定于Linux的API函数而不是Win32 API函数.根据Win32 API的特定部分和应用程序的大小(代码量),它可以介于中等难度和令人生畏之间.
应用程序将哪些特定功能标记为__stdcall?
实际上,GCC的Windows端口必须具有__stdcall,因为它应该能够为Win32平台生成符合规范的代码.但是因为在Linux下只有一个标准的调用约定,它与默认的编译器输出一致,所以不需要这个语句.
您的应用程序未在Linux下编译的原因几乎可以肯定是因为它引用了未在Linux下定义的Win32 API函数 - 您需要找到适当的Linux对应项.Win32 API和Linux GLibc API是非常不同的,不能轻易替换.
将应用程序移植到Linux的最简单方法可能是使用Wine,即以这种方式修改Windows代码,使其在Linux下的Wine下顺利运行.即使是最复杂的应用程序,如现代计算机游戏,也可以在Linux下运行.
当然,如果你真的希望它在Linux下本地运行,那么移植是唯一的出路.
| 归档时间: |
|
| 查看次数: |
23492 次 |
| 最近记录: |