Я пытаюсь создать программу, которая связывается с 32-битной встроенной системой, которая работает на компьютере x86_64 на базе Linux (хост). В главной программе у меня есть структура, содержащая несколько указателей, которые отражают идентичную структуру встроенной системы.Является ли флаг -mx32 GCC (правильно)?
Проблема в том, что на хосте указатели изначально 64-битные, поэтому смещение элементов структуры не такое же, как во встроенной системе. Таким образом, при копировании структуры (как memcpy) содержимое заканчивается не в том месте в копии хоста.
struct {
float a;
float b;
float *p;
float *q;
} mailbox;
// sizeof(mailbox) is 4*4=16 on the embedded, but 2*4+2*8=24 on the host
К счастью, я узнал, что here НКУ имеет возможность -mx32
для создания 32-разрядных указателей на x86_64 машинах. Но, при попытке использовать это, я получаю сообщение об ошибке поговорку:
$ gcc -mx32 test.c -o test.e
cc1: error: unrecognized command line option "-mx32"
Это для GCC версии 4.4.3 и 4.7.0 20120120 (экспериментальный).
Почему эта опция не работает? Есть ли способ обойти это?
EDIT: В отношении v4.4.7 manual не было опции -mx32, и это верно до v4.6.3. OTOH, v4.7.0 показывает эту опцию, поэтому может быть, что версия Jan-20, которую я использую, не является последней!
Если вы общаетесь с разностной системой, использование указателя с указателями кажется неправильным, поскольку указатели будут действительны только на одной стороне линии связи, даже если бы это был тот случай, когда указатели имели одинаковый размер в обоих системы. Возможно, вы могли бы описать свою проблему с «большой картинкой»? –
@CharlesBailey - Я не использую указатели на стороне хоста для ссылки на любые данные. Мне просто нужны адреса ссылочных объектов во встроенной системе. Я использую (значение) эти адреса для определенной цели в размере хоста. – ysap
@CharlesBailey - BTW, если хост закончится на встроенном хост-процессоре (который он будет в моем случае), как процессор ARM с внешним математическим ускорителем, где оба они имеют одинаковое пространство памяти, тогда использование адресов может быть действующий с обеих сторон. – ysap