设为首页 加入收藏

TOP

C++程序开发从Linux迁移到AIX5.3
2014-11-23 23:38:20 来源: 作者: 【 】 浏览:7
Tags:程序开发 Linux 迁移 AIX5.3

由于一直使用Linux和win32来进行程序开发,对程序的移植性只考虑到了这两个平台之间的,后来,程序需要移植到AIX5.3上,当时认为AIX也属类UNIX系统,应该支持POSIX标准,对于移植不存在什么问题。但在实践中还是发现了一些问题,总结如下:


1,编译器


在AIX上一般使用自带的xlc编译C++代码,这里还是采用GCC来编译,从IBM上下载


gcc-4.0.0-1.aix5.3. c.rpm,


gcc-cplu lus-4.0.0-1.aix5.3. c.rpm,


libgcc-4.0.0-1.aix5.3. c.rpm,


li tdcplu lus-4.0.0-1.aix5.3. c.rpm,


li tdcplu lus-devel-4.0.0-1.aix5.3. c.rpm


这五个包,分别安装。下载地址:http://www-03.ibm.com/servers/aix/products/aixos/Linux/download.html


安装成功后,自行写一个hello world的小程序测试,发现程序在link的时候会报一堆的错误,如:


ld: 0711-317 ERROR: Undefined symbol: cout


ld: 0711-317 ERROR: Undefined symbol: .ostream::operator<<(char const *)


ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.


collect2: ld returned 8 exit status


原因:AIX不会默认把stdc++库载入,需要自行指定,在编译中加上-lstdc++ -L/usr/local/lib(即libstdc++.a所在的目录)。


另外,如果编译的是C++代码,一定要用G++来编译,在AIX上编译时,用GCC来编译照样会成功,但一些C++的特性在运行时会表现不出来,导致出错,例如,我在程序中用到异常处理,但该文件用GCC来编译,发现编译成功,但运行时,无论如何都捕获不到throw出来的异常,改用G++编译,成功。


2,操作系统SDK


在AIX上有小部份API与Linux上不同,比如gethostbyname_r所带的参数会不一样,等等,另外,还有一些常量是没有定义的,比如你要在你公用的头文件中定义:


#ifndef AF_UNIX
#define AF_UNIX 1
#endif
#ifndef AF_INET
#define AF_INET 2
#endif
#ifndef PF_UNIX
#define PF_UNIX AF_UNIX
#endif
#ifndef PF_INET
#define PF_INET AF_INET
#endif
#ifndef AF_LOCAL
#define AF_LOCAL AF_UNIX
#endif
#ifndef PF_LOCAL
#define PF_LOCAL PF_UNIX
#endif


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux中实现在系统启动时自动加载.. 下一篇Linux操作系统中杀死进程方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: