在flash项目中使用flashzlib

在flash项目中使用flashzlib,flash,actionscript-3,alchemy,Flash,Actionscript 3,Alchemy,我正在集成到我的一个flash项目中。如项目文件中所述。我已经成功地生成了libz.a和z.l.bc,并在适当的位置推送了libs和header 现在,我已经写了这个小包装。使用以下方法可以很好地编译: gcc example1_as3.c -lz -O3 -Wall -swc -o example.swc 这包含在flash项目中,如下所示(uncompressedData是byteArray): 但是flash文件在最后一行失败。我不知道我错过了什么。z、 l.bc文件是340KB,而ex

我正在集成到我的一个flash项目中。如项目文件中所述。我已经成功地生成了libz.a和z.l.bc,并在适当的位置推送了libs和header

现在,我已经写了这个小包装。使用以下方法可以很好地编译:

gcc example1_as3.c -lz -O3 -Wall -swc -o example.swc
这包含在flash项目中,如下所示(uncompressedData是byteArray):


但是flash文件在最后一行失败。我不知道我错过了什么。z、 l.bc文件是340KB,而example.swc文件只有80KB。

-它失败的原因有两个。要么是Alchemy没有找到
z.l.bc
(也懒得告诉你),要么是你没有正确地捕获和报告错误代码

正如我在问题注释中提到的,我在
inflateInit
调用中遇到运行时错误。在我的案例中,Alchemy并没有像它应该的那样搜索
z.l.bc
。通过将其移动到
/usr/local/lib
解决了这个问题。之后,您的代码按预期返回
Z_OK

我注意到您已经注释掉了所有的
CHECK\u ERR
调用,这意味着如果您注释掉
示例中的早期返回,您将进入一个无限循环。c:52
,因为您在下面的
for
块中没有检查
充气
调用的错误。对我来说,
inflate
返回了
Z_DATA_ERROR
,因为我只是为了测试目的给它一些UTF字节

说到测试,我注意到flashzlib提供了一个小测试套件:

我借用了这段代码,将
main
重命名为
test\u all
,注释掉了对
test\u gzio
的调用,并将所有
printf
调用替换为
fprintf
stderr
的调用。结果是:

zlib version 1.2.3 = 0x1230, compile flags = 0x2000095 uncompress(): hello, hello! inflate(): hello, hello! large_inflate(): OK after inflateSync(): hello, hello! inflate with dictionary: hello, hello! 0 zlib版本1.2.3=0x1230,编译标志=0x2000095 解压():你好,你好! 充气():你好,你好! 大气压充气():正常 after inflateSync():你好,你好! 用字典充气:你好,你好! 0 一切似乎都井然有序


脚注:
当然,炼金术中没有文件访问权限。

²
stdout
已为我断开连接,但
stderr
显示在我的跟踪控制台中

它不记录任何内容,也不执行进一步的代码。它只是卡在这里。我自己快速尝试,我遇到的运行时错误
示例。c:50
未定义的sym:\u inflateInit\u
@the\u asMan no,just logger(logging.ILogger)@gunslinger 47如何运行它来查看此错误?我正在运行flash inside browser,它不会向我抛出任何东西:(@Gunslinger47还有任何关于如何修复此错误的提示吗?(可能是一些编译选项?)谢谢@Gunslinger47。flashzlib对我来说也非常好用。我尝试在/usr/local/lib中推z.l.bc,但这对我不起作用:(.将继续挖掘并返回。再次感谢!好的,因此我能够将它与Makefile中的命令集成,即gcc-O3-DNO_vsnprintf-DUSE_MMAP-swc-o example.swc example1_as3.o-L.libz.a通过传递正确的值使它现在可以工作。谢谢! zlib version 1.2.3 = 0x1230, compile flags = 0x2000095 uncompress(): hello, hello! inflate(): hello, hello! large_inflate(): OK after inflateSync(): hello, hello! inflate with dictionary: hello, hello! 0