将 Win32 C/C++ 应用程序迁移到 POWER 上的 Linux,第 1 部分: 进程、线程和共享内存服务 (转)

ibm®
跳转到主要内容
    中国 [选择]    使用条款
 
 
select a scope:search for:    
    首页    产品    服务与解决方案    支持与下载    个性化服务    
跳转到主要内容
developerWorks 中国  >  Linux  >

将 Win32 C/C++ 应用程序迁移到 POWER 上的 Linux,第 1 部分: 进程、线程和共享内存服务

developerworks
文档选项
将此页作为电子邮件发送

将此页作为电子邮件发送

级别: 初级

Nam Keung (namkeung@us.ibm.com), 高级程序员 Chakarat Skawratananond (chakarat@us.ibm.com), pSeries Linux 技术顾问

2005 年 1 月 06 日

本文的内容是 Win32 API(特别是进程、线程和共享内存服务)到 POWER 上 Linux 的映射。本文可以帮助您确定哪种映射服务最适合您的需要。作者向您详细介绍了他在移植 Win32 C/C++ 应用程序时遇到的 API 映射。

概述

有很多方式可以将 Win32 C/C++ 应用程序移植和迁移到 pSeries 平台。您可以使用免费软件或者第三方工具来将 Win32 应用程序代码移到 Linux。在我们的方案中,我们决定使用一个可移植层来抽象系统 API 调用。可移植层将使我们 的应用程序具有以下优势:

  • 与硬件无关。
    • 与操作系统无关。
    • 与操作系统上版本与版本间的变化无关。
  • 与操作系统 API 风格及错误代码无关。
  • 能够统一地在对 OS 的调用中置入性能和 RAS 钩子(hook)。

由于 Windows 环境与 pSeries Linux 环境有很大区别,所以进行跨 UNIX 平台的移植比进行从 Win32 平台到 UNIX 平台的移植要容易得多。这是可以想到的,因为很多 UNIX 系统都使用共同的设计理念,在应用程序层有 非常多的类似之处。不过,Win32 API 在移植到 Linux 时是受限的。本文剖析了由于 Linux 和 Win32 之间设计 的不同而引发的问题。

回页首

初始化和终止

在 Win2K/NT 上,DLL 的初始化和终止入口点是 _DLL_InitTerm 函数。当每个新的进程获得对 DLL 的访问时,这个 函数初始化 DLL 所必需的环境。当每个新的进程释放其对 DLL 的访问时,这个函数为那个环境终止 DLL。当您链接 到那个 DLL 时,这个函数会自动地被调用。对应用程序而言,_DLL_InitTerm 函数中包含了另外一个初始化和终止例程。

在 Linux 上,GCC 有一个扩展,允许指定当可执行文件或者包含它的共享对象启动或停止时应该调用某个函数。语法是 __attribute__((constructor)) 或 __attribute__((destructor))。 这些基本上与构造函数及析构函数相同,可以替代 glibc 库中的 _init 和 _fini 函数。

这些函数的 C 原型是:

void __attribute__ ((constructor)) app_init(void);

come from: http://www.ibm.com/developerworks/cn/linux/es-MigratingWin32toLinux.html 
more to: http://www.ibm.com/developerworks/cn/linux/...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值