2017-04-17 104 views
0

最近,我遇到了一个代码片段的问题,它不返回期望值,这导致应用程序失败。关于ACE框架的查询

的代码使用以下命令内置在RedHat Linux 7.1 -

g++ ace-test.cpp -I<path-to-ace-6.2-root> -L<path-to-ace-6.2-root>/ace/Linux -g -lACE 

代码段正在建造被粘贴下面 -

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include "ace/MEM_Addr.h" 
#include <iostream> 

using namespace std; 

int main(int argc, char* []) { 

     ACE_MEM_Addr addr ; 

     cout << "ACE_MEM_Addr::addr.get_host_name() " << addr.get_host_name() << endl ; 

} 

在执行时,所述代码打印以下行

ACE_MEM_Addr::addr.get_host_name() **unknown** 

在最近修补过的运行linux的系统上。

在不修补的不同系统上,相同的代码返回正确的主机名。

我想弄清楚哪个补丁导致了这个问题,但无法取得很大进展。

如果有人可以请延长一点帮助,将不胜感激。

如果需要,我可以分享已应用的补丁列表。

+0

尝试在'strace'下运行你的程序来查看它的功能。 – melpomene

+0

谢谢!很快尝试 – ANSI

+0

嗨@mepomene,Strace证明非常有用!非常感谢 !通过比较所做的系统调用,我发现代码的工作版本是从/ etc/hosts读取条目,而“破损”的版本是检查ipv6配置。任何可能导致它的想法? URL显示strace输出的比较再次感谢您的帮助! – ANSI

回答

1

终于找到了罪魁祸首。

下面是/etc/nsswitch.conf中的条目:

主机:文件的DNS - (在没有补丁的主机)

主机:文件的DNS MYHOSTNAME - (在已修补的主机上)

删除myhostname进入后者解决了这个问题。

相关RHEL知识基础入门 -

https://access.redhat.com/solutions/2766251

多谢所有帮助!