#flash #actionscript #g #swc #alchemy
#flash #actionscript #g #swc #алхимия
Вопрос:
Я могу без проблем модифицировать и скомпилировать пример stringecho.c из SDK для использования в AS3.
Для моего собственного приложения я успешно компилирую с помощью g несколько десятков файлов и связываю:
g -swc -o myApp.swc glue.o demo.o obj1.o obj2.o obj3.o
Я получаю файл MyApp.swc, но он ошибочно равен всего 80 кб (того же размера, что и простой пример stringecho).
При проверке в любой среде разработки flash, в отличие от 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:
Прочитайте это сообщение в блоге.
Короче говоря, связывание большого количества файлов .o не сработает. Вам нужно объединить их в файл library (.a). Затем вы компилируете свой glue-код с использованием этой библиотеки. В вашем примере это было бы что-то вроде этого:
ar rc mylib.a demo.o obj1.o obj2.o obj3.o
ranlib mylib.a
g -swc -o myApp.swc glue.c mylib.a
Комментарии:
1. было ли это полезно для вас? если да, пожалуйста, примите мой ответ как ответ