Ошибка встроенной сборки GCC: операнд сборки блока не распознан - PullRequest
2 голосов
/ 03 июня 2011

У меня есть еще одна ошибка при попытке компиляции с Apple GCC 4.2.1 с использованием аргумента -fasm-blocks (который разрешает сборку Intel style синтаксис) встроенный код сборки, который работал в MSVC : операнд сборки блока не распознается , метка 'LASM $ TYPE' используется, но не определена :

typedef struct _MyStruct
{
    int data;
    //...
}MyStruct;

void testAsm()
{
    MyStruct *pMyStruct = new MyStruct(); // Please not that I create an instance of MyStruct here only for the sake of simplicity

    _asm
    {
        mov edi, pMyStruct
        add edi, TYPE MyStruct // error: block assembly operand not recognized. label 'LASM$TYPE' used but not defined
        //...
    };

    delete pMyStruct;
}


Как я могу решить эту проблему?

1 Ответ

1 голос
/ 03 июня 2011

TYPE является ключевым словом MSVC asm. Здесь это просто означает sizeof. Я попытался найти некоторую документацию по gcc asm-block в Интернете, но я сдался через десять минут. Попробуйте

add edi,sizeof(MyStruct)

и варианты. У меня нет Apple, поэтому я не могу попробовать его для вас.

Обновлено , чтобы ответить на вопрос в комментарии: Попробуйте это:

add edi,__offsetof(MyStruct,MyMember)

Если это не работает, см. «Использование коллекции компиляторов GNU» для документации.

...