2012-03-25 99 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并查看该定义的代码是否符合您的期望。