我有一个程序执行一些网络IO,可以很好地编译32位二进制文件
但是,当我在编译时设置-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 sparc上使用GCC
答案 0 :(得分:1)
最终发现我在编译时启用了-mfaster-structs选项。
出于某种原因,删除此选项可以解决此构建问题。这导致64位构建失败,尽管32位构建工作。 如果有人可以解释,我当然想知道为什么
答案 1 :(得分: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
并查看该定义的代码是否符合您的预期。