портирование сетевого кода на 64 бита - PullRequest
0 голосов
/ 25 марта 2012

У меня есть программа, которая выполняет некоторый сетевой ввод-вывод, который прекрасно компилирует 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>

Может кто-нибудь объяснить мне, что я делаю неправильно и как это исправить?Я использую GCC на Solaris Sparc

Ответы [ 2 ]

1 голос
/ 25 марта 2012

в итоге обнаружил, что у меня включена опция -mfaster-structs во время компиляции.

По какой-то причине удаление этой опции решает эту проблему сборки.это приводит к сбою 64-битной сборки, хотя 32-битная сборка работает.Если бы кто-то мог объяснить это, я бы, конечно, хотел бы знать, почему

0 голосов
/ 25 марта 2012

Это действительно странно.

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 и посмотрите, соответствует ли код вокруг этого определения.

...