2012-03-25 83 views
0

我已經執行某些網絡IO,編譯32位二進制就好移植網絡代碼爲64位

然而,當我在編譯時設置-m64選項的程序得到以下而隱蔽錯誤

In file included from /usr/include/sys/stream.h:22, 
      from /usr/include/netinet/in.h:62, 
      from /usr/include/sys/socket.h:221, 
      from operation_networkio.cc:15: 
/usr/include/sys/vnode.h:241: error: overflow in array dimension 
/usr/include/sys/vnode.h:241: error: size of array `pad' is too large 

在我的源代碼operation_networkio.cc違規線是在我的程序觸發這個錯誤似乎是

#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <netdb.h> 

可能有人開導我什麼我做錯誤以及如何治療? 我在Solaris上使用GCC sparc

回答

1

最終發現我在編譯時啓用了-mfaster-structs選項。

由於某些原因刪除此選項可以解決此構建問題。這會導致64位構建失敗,儘管32位構建有效。 如果有人能解釋它我肯定想知道爲什麼

0

這確實很奇怪。

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/sys/vnode.h#286

它不應該是可能的,這些數據結構增長超過64個字節。或者,也許你包含了一些重新定義這些數據結構的文件。要確定原因是什麼,您應該查看C編譯器的預處理輸出。

g++ -E operation_networkio.cc -I... -D... -o preprocessed.cc 

運行該命令後,您應該看看文件preprocessed.cc。搜索vn_vfslocks_entry並查看該定義的代碼是否符合您的期望。