我们的源代码有一堆独立的静态模板函数。我需要使用IBM的本机xlc++
编译器在AIX 7.1 Power 7系统上编译它。将static
关键字与独立函数一起使用是一种过时的做法,xlc++
不支持它,所以为了编译我的程序,我从函数声明中删除了该关键字。程序编译成功后,第一次运行崩溃(在Linux/g++
上,它使用相同的输入数据完全稳定)。
我尝试使用dbx
进行调试,但调试器抱怨internal error
和segmentation fault in extend_brk
。没有使用内存配额,因此它不是内存/磁盘空间不足。系统配置为创建完整核心转储,程序使用-g
选项编译。所有库都是静态链接的,因此在共享库中抛出异常不是问题。
1)是否可以在xlc++
上编译静态模板函数而不删除static
关键字,因此我可以确定所有代码与RHEL系统中的相同?
2)为什么调试器不起作用?
答案 0 :(得分:0)
似乎我有32/64位可移植性问题,在这种情况下删除 static 关键字是无害的。 在我的.kshrc文件中添加以下行后,问题就消失了:
export OBJECT_MODE=64
默认情况下,IBM XL编译器以32位模式运行,即使在64位AIX 7.1系统上也是如此。要覆盖默认行为,程序员可以为编译器设置环境变量或提供-q64参数。