2017-04-17 83 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

多謝所有幫助!