Flash Alchemy создала слишком маленькую библиотеку .swc и отсутствующие функции - PullRequest
0 голосов
/ 23 апреля 2011

Я могу изменить и скомпилировать пример stringecho.c SDK для AS3 без проблем.

Для моего собственного приложения я успешно компилирую с g ++ несколько десятков файлов и ссылку:

g++ -swc -o myApp.swc glue.o demo.o obj1.o obj2.o obj3.o

Я получаю myApp.swc, но он ошибочно составляет всего 80 КБ (такого же размера, что ипростой пример stringecho).

При проверке в любой флэш-IDE, в отличие от stringecho.swc, который имеет

cmodule.stringecho.AlchemyBlock 
cmodule.stringecho.AlchemyBreakPoint
...

Этот myApp.swc имеет

cmodule.AlchemyBlock
cmodule.AlchemyBreakPoint
...

И не имеет функции склейки,По сути, я не могу использовать его в проекте AS3.

Мой код glue.c приведен ниже.По сути, я создаю демонстрационный объект и вызываю его функции.Демонстрационный класс инкапсулирует все остальные объектные файлы.

#include "demo.h"
#include "AS3.h"
    AS3_Val InitSystem(void* self, AS3_Val args)
    {
        demo = new demo9();
        return 0;
    }

    AS3_Val LoadSceneFile( void* self, AS3_Val args )
    {
        demo->loadScene("scene.txt");
        return 0;
    }

...

    int main()
    {
        AS3_Val InitSystemMethod = AS3_Function( NULL, InitSystem );
        AS3_Val LoadSceneFileMethod = AS3_Function( NULL, LoadSceneFile );
        AS3_Val getAlchemyScreenMethod = AS3_Function( NULL, getAlchemyScreen );
        AS3_Val setMouseStateMethod = AS3_Function( NULL, setMouseState );
        AS3_Val rasterizeMethod = AS3_Function( NULL, rasterize );

        AS3_Val result = AS3_Object("InitSystem: AS3ValType,LoadSceneFile: AS3ValType,getAlchemyScreen:AS3ValType,setMouseState:AS3ValType,rasterize:AS3ValType"
                                    ,InitSystemMethod,
                                    LoadSceneFileMethod,
                                    getAlchemyScreenMethod,
                                    setMouseStateMethod,
                                    rasterizeMethod);

        AS3_Release( InitSystemMethod );
        AS3_Release( LoadSceneFileMethod );
        AS3_Release( getAlchemyScreenMethod );
        AS3_Release( setMouseStateMethod );
        AS3_Release( rasterizeMethod );

        AS3_LibInit( result );

        return 0;
    }

1 Ответ

1 голос
/ 01 мая 2011

Прочитайте это сообщение в блоге .

Короткий рассказ о том, что связывание большого количества файлов .o не будет работать.Вам необходимо объединить их в файл библиотеки (.a).Затем вы компилируете свой клейкий код для этой библиотеки.По вашему примеру это будет примерно так:

ar rc mylib.a demo.o obj1.o obj2.o obj3.o
ranlib mylib.a
g++ -swc -o myApp.swc glue.c mylib.a
...