热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

C++程序从linux到aix5.3

C++程序从linux到aix5.3--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
由于一直使用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/ai ... 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

3,线程安全性

在AIX上的程序如果使用了多线程,程序一定要在编译时加上-D_THREAD_SAFE或者-D_THREAD_SAFE_ERRNO,查看/usr/include/errno.h就不难发现其原因了。否则程序会报出很多奇奇怪怪的错误,搞得你头大。

另外,如果你使用了第三方库,你一定要检查一下,看它是否有分单线程或者多线程的版本,比如sybase数据库的ct-lib库,在AIX上就有分libct.so和libct_r.so,当然还你要搞清楚你安装的操作系统是多少位的,32bit或者64bit,同样有libct64.so和libct64_r.so。

4,Makefile文件

在AIX上自己可以安装一个GUN的make,这样你就不用太大改动你在linux下的Makefile文件了,但还是有小许地方是要改动的,比如你有使用到.so文件,你不能用-l某某库的方式,你必须以全路径方式,与.o文件一起link起来,比如你要用到libsybdb.so,如果你用-lsybdb,-L$(SYBASE)/lib,编译时还是会报找不到该SO文件,你可以用$(SYBASE)/lib/libsybdb.so直接把全路径编译,正常。

以上一些,是我在实际中发现的一些问题,因为对AIX也不太熟悉,并不确定是否是因为我本身的配置或者其它别的原因导致的,如果哪位高手发现有更好的办法,望指点。另如还有其它的一些经验,也希望补充。谢谢!

其次,介绍几个比较好的工具,以网络邻居方式访问AIX上文件:samba for aix,同样也有linxu版本。另外,查看是否内存泄露:svmon -P PID -i N就每隔N秒打印一下进程PID的资源使用情况。
推荐阅读
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • 微信答题小程序的设计与实现详解
    本文详细介绍了如何设计和实现一个微信答题小程序,包括题库的设计和题目的呈现。通过抽取题目编号和使用全局变量记录当前题目的信息,实现了题目的刷新和显示。同时,还介绍了题目的展示方式和容器的创建。本文适合零基础的小白学习微信答题小程序的开发。 ... [详细]
author-avatar
1515921251_06a4db
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有