- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
原文:/developerworks/cn/aix/library/au-porting/从 Windows 移植到 UNIX 环境大多数基于 Microsoft? Windows? 的项目都是使用 Microsoft Visual Studio? 构建的,这是一种复杂的集成开发环境 (IDE),它可以为开发人员实现几乎整个构建过程的自动化。此外,Windows 开发人员使用了 Windows 平台特定的应用程序程序接口 (API)、头文件和语言扩展。大多数类 UNIX? 系统,如 SunOS、OpenBSD 和 IRIX,都不支持 IDE 或者任何 Windows 特定的头文件或扩展,因此进行移植是一项非常耗费时间的活动。更麻烦的是,遗留的基于 Windows 的代码需要运行于 16 位或者 32 位的 x86 体系结构中。基于 UNIX 的环境通常是 64 位的,并且大多数 UNIX 供应商都不支持 x86 指令集。本系列文章共由两个部分组成,本文是其中的第一部分,介绍将 Windows 操作系统中一个典型的 Visual C++ 项目移植到 SunOS 中的?g++?环境的过程,同时详细说明了如何解决前面提到的一些问题。Visual Studio 中的 C/C++ 项目类型您可以使用 Visual C++ 项目创建三种项目变体(单线程或者多线程)中的一种:动态链接库(DLL 或者 .dll)静态库(LIB 或者 .lib)可执行文件(.exe)对于更复杂的变体,可以使用 Visual Studio .NET 解决方案,这种解决方案允许创建和管理多个项目。本文在下面的几个部分中将重点关注如何将动态和静态库项目变体从 Windows 移植到 UNIX。将 DLL 移植到 UNIX 环境对于 Windows 中的 .dll 文件,UNIX 的等价物是共享对象 (.so) 文件。然而,创建一个 .so 文件的过程与创建一个 .dll 文件的过程完全不同。请考虑清单 1?中的示例,在这个示例中,您尝试创建一个小的 .dll 文件,其中仅包含一个函数?printHello,并且在 main.cpp 文件的 main 例程中调用了这个函数。清单 1. 包含 printHello 例程声明的文件 hello.h#ifdef BUILDING_DLL #define PRINT_API __declspec(dllexport) #else #define PRINT_API __declspec(dllimport) #endif extern C PRINT_API void printHello();清单 2?提供了 hello.cpp 的源代码。清单 2. 文件 hello.cpp#include iostream #include hello.h void printHello { std::cout hello Windows/UNIX users\n; } extern C PRINT_API void printHello();如果您使用了用于 80x86 平台的 Microsoft 32 位?C/C++?标准编译器 (cl),那么可以使用下面的命令来创建 hello.dll 文件:cl /LD hello.cpp /DBUILDING_DLL/LD?指示?cl?创建一个 .dll 文件。(还可以指示它创建其他格式的文件,如 .exe 或者 .obj。)/DBUILDING_DLL?为这个特定的构建过程定义了?PRINT_API?宏,以便从这个 DLL 导出 printHello 符号。清单 3?包含了 main.cpp main 源文件,其中使用了 printHello 例程。这里所做的假设是,hello.h、hello.cpp 和 main.cpp 都位于相同的文件夹中。清单 3. 使用 printHello 例程的 main 的源代码#include hello.h int main ( ) { printHello(); return 0; }要编译并连接 main 代码,可以使用下面的命令行:cl main.cpp hello.lib快速地查看源文件和生成的输出,其中说明了两个重要的问题。第一点,要从一个 DLL 中导出任何函数、变量、或者类,都需要使用 Windows 特定的语法?__declspec(dllexport)。同样地,要向一个 DLL 导入任何函数、变量、或者类,都需要使用 Windows 特定的语法?__declspec(dllimport)。第二点,这个编译过程生成了两个文件:printHello.dll 和 printHello.lib。PrintHello.lib 用于连接 main 源
文档评论(0)