gpt4 book ai didi

c++ - 使用 Adob​​e Alchemy 的 libFLAC 移植问题

转载 作者:太空狗 更新时间:2023-10-29 21:50:30 25 4
gpt4 key购买 nike

我正在尝试使用 Adob​​e Alchemy 移植 FLAC 编码器以在 Flash 中使用,但无法找出问题所在。
我在 Windows 上使用 Alchemy for Cygwin。它已正确安装和配置。
以下是我为移植 FLAC 编码器所遵循的步骤:

  1. 下载最新版本的 FLAC 源 (1.2.1)
  2. 配置启用炼金术的 FLAC 源 ( ./configure --enable-static=true --enable-shared=false ) ( alc-on 在配置之前)
  3. 在启用炼金术的情况下编译 libFLAC(sr​​c/libFLAC 文件夹中的 make)
  4. 将头文件和编译后的静态库 (libFLAC.a) 复制到 Alchemy 文件夹(分别为 ${ACLHEMY_HOME}/usr/local/include 和 ${ACLHEMY_HOME}/usr/local/lib)
  5. 最后,这样编译SWC:
    gcc encodeflac.c -O3 -Wall -swc -lFLAC -o encodeflac.swc<br/>或者(随便)
    gcc encodeflac.c -O3 -Wall -swc -lflac -o encodeflac.swc<br/>

encodeflac.c 是 FLAC 源代码 (examples/c/encode/file/main.c) 中包含的示例的修改版本,并被采用以与 ActionScript ByteArrays 一起使用。

swc 将在没有警告或错误的情况下编译。但最终的 swc 大小只有 85kb,而静态库大小(libFLAC.a)约为 1mb!另外,编码不起作用。尝试在 AS 中使用它时出现以下错误:
[Fault] exception, information=Undefined sym: <em>FLAC</em>_stream_encoder_new

是不是说swc里面没有包含静态库?为什么?

提前致谢。

最佳答案

Alchemy 的 swc 链接器没有很好的错误报告,这使得调试变得困难。发生的事情是链接器没有找到库。如何修复:

  1. gcc 区分大小写。您必须使用 -lFLAC(而非 -lflac)
  2. alchemy 需要您在构建 libFLAC.a 时生成的 FLAC.l.bc 文件

不幸的是,让它实际链接最终会产生链接时错误:

Cannot yet select: 0x198b960: i32 = ConstantPool < i64 6881500230622117888> 0
0 llc 0x00636dfe _ZNSt8_Rb_treeIN4llvm3sys4PathES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13insert_uniqueERKS2_ + 6078
1 llc 0x006373a2 _ZNSt8_Rb_treeIN4llvm3sys4PathES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13insert_uniqueERKS2_ + 7522
2 libSystem.B.dylib 0x9402f2bb _sigtramp + 43
3 ??? 0xffffffff 0x0 + 4294967295
4 libSystem.B.dylib 0x940a323a raise + 26
5 libSystem.B.dylib 0x940af679 abort + 73
6 llc 0x002f862b _ZN98_GLOBAL__N__Volumes_data_dev_FlaCC_llvm_2.1_lib_Target_AVM2_AVM2ISelDAGToDAG.cpp_00000000_F04616B616AVM2DAGToDAGISel10SelectCodeEN4llvm9SDOperandE + 187
7 llc 0x002fa193 _ZN98_GLOBAL__N__Volumes_data_dev_FlaCC_llvm_2.1_lib_Target_AVM2_AVM2ISelDAGToDAG.cpp_00000000_F04616B616AVM2DAGToDAGISel10SelectRootEN4llvm9SDOperandE + 819
8 llc 0x002e6a2c _ZN4llvm19X86_64TargetMachineD0Ev + 65116
9 llc 0x003de4ca _ZN4llvm11StoreSDNodeD1Ev + 1610
10 llc 0x0040d3fe _ZN4llvm11StoreSDNodeD1Ev + 193918
11 llc 0x0040f92e _ZN4llvm11StoreSDNodeD1Ev + 203438
12 llc 0x005d1926 _ZN4llvm12FunctionPassD1Ev + 20998
13 llc 0x005d1f3a _ZN4llvm12FunctionPassD1Ev + 22554
14 llc 0x005d20c5 _ZN4llvm12FunctionPassD1Ev + 22949
15 llc 0x00002e44 _mh_execute_header + 7748
16 llc 0x00001f36 _mh_execute_header + 3894
17 ??? 0x00000006 0x0 + 6

我在尝试将 libFLAC (v1.2.1) 作为一个整体(而不仅仅是库)构建时看到了同样的错误。当有某种 C 代码生成 Alchemy 无法处理的 LLVM 字节码时,就会发生此错误。 (不清楚这是 LLVM 生成的问题还是 Alchemy 的错误。)

您必须找出有问题的代码在哪里,并将其更改为 Alchemy 喜欢的内容(无需实际更改逻辑!)。我似乎记得有人对 ffmpeg 有类似的问题: http://forums.adobe.com/message/2905914#2905914

关于c++ - 使用 Adob​​e Alchemy 的 libFLAC 移植问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6017993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com