我可以修改和编译SDK的stringecho.c示例用于AS3使用没有问题。
对于我自己的应用程序,我用g++成功编译了几十个文件,链接:
g++ -swc -o myApp.swc glue.o demo.o obj1.o obj2.o obj3.o
我得到一个myApp。Swc,但错误地只有80k(与简单的stringecho示例相同的大小)。
在任何flash IDE中检查时,不像stringecho。有
的SWCcmodule.stringecho.AlchemyBlock
cmodule.stringecho.AlchemyBreakPoint
...
这个myApp 。swc
cmodule.AlchemyBlock
cmodule.AlchemyBreakPoint
...
没有我定义的粘接函数。实际上,我不能在AS3项目中使用它。
我的glue.c代码如下。基本上,我创建一个demo对象并调用它的函数。这个演示类封装了所有其他的对象文件。
#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;
}
阅读这篇博文
简单来说,链接大量。o文件是行不通的。你需要将它们"打包"到一个库文件中。然后根据该库编译粘合代码。根据您的示例,它将是这样的:
ar rc mylib.a demo.o obj1.o obj2.o obj3.o
ranlib mylib.a
g++ -swc -o myApp.swc glue.c mylib.a