构建ARM汇编程序vorbis解码器库&x27;颤音';对于iPhone

构建ARM汇编程序vorbis解码器库&x27;颤音';对于iPhone,iphone,arm,assembly,vorbis,Iphone,Arm,Assembly,Vorbis,我正在尝试为iPhone编译。我已将文件bitwise.c bitwiseARM.s codebook.c dpen.s dsp.c floor0.c floor1.c floor1ARM.s floor_lookup.c framing.c info.c mapping0.c mdct.c mdctARM.s misc.c res012.c拉入新目标,并添加了以下自定义设置: GCC_PREPROCESSOR_DEFINITIONS = _ARM_ASSEM_ GCC_C_LANGUAGE_S

我正在尝试为iPhone编译。我已将文件bitwise.c bitwiseARM.s codebook.c dpen.s dsp.c floor0.c floor1.c floor1ARM.s floor_lookup.c framing.c info.c mapping0.c mdct.c mdctARM.s misc.c res012.c拉入新目标,并添加了以下自定义设置:

GCC_PREPROCESSOR_DEFINITIONS = _ARM_ASSEM_
GCC_C_LANGUAGE_STANDARD = gnu99
GCC_THUMB_SUPPORT = YES
。。。但是,一旦xcode到达第一个汇编程序文件bitwiseARM.s,就会出现如下错误:

/tremolo/bitwiseARM.s:3:Unknown pseudo-op: .global
/tremolo/bitwiseARM.s:3:Rest of line ignored. 1st junk character valued 111 (o).
/tremolo/bitwiseARM.s:4:Unknown pseudo-op: .global
/tremolo/bitwiseARM.s:4:Rest of line ignored. 1st junk character valued 111 (o).
/tremolo/bitwiseARM.s:5:Unknown pseudo-op: .global
/tremolo/bitwiseARM.s:5:Rest of line ignored. 1st junk character valued 111 (o).
/tremolo/bitwiseARM.s:6:Unknown pseudo-op: .global
/tremolo/bitwiseARM.s:6:Rest of line ignored. 1st junk character valued 111 (o).
/tremolo/bitwiseARM.s:11:bad instruction `STMFD r13!,{r10,r11,r14}'
/tremolo/bitwiseARM.s:12:bad instruction `LDMIA r0,{r2,r3,r12}'
/tremolo/bitwiseARM.s:16:bad instruction `SUBS r2,r2,r1'
/tremolo/bitwiseARM.s:17:bad instruction `BLT look_slow'
/tremolo/bitwiseARM.s:19:bad instruction `LDR r10,[r3]'

第一个错误我可以用谷歌搜索,并将.global改为.globl修复了第一个错误,但我仍然得到了错误的指令,我不知道为什么。在谷歌上搜索ARM指令集,我认为上面的指令是有效的。我尝试切换thumb支持,并仅为armv7而不是armv6构建,但都没有帮助。

它似乎试图在thumb模式下编译bitwiseARM.s(例如thumb使用
推送
而不是
STMFD SP!,
)。我不确定苹果的天然气支持什么指令(它基于一些非常古老的叉子),但请尝试在文件开头添加
.arm
.code32

正如Igor所说,苹果的天然气叉子很古老,需要:

  • .global替换为.globl
  • 所有指令都是小写的
  • 替换“;”带“@”的注释分隔符
  • 地址导入的存根标签
我已经为Tremolo.s文件编写了一个预处理器awk脚本,以使Xcode能够接受它们,我将通过Robin对其进行反馈


或者,您也可以试试。

这个脚本在什么地方可用吗?我正在尝试为iOS编译tremolo,但到目前为止运气不好。作为一种解决方法,您可以从库中删除所有的.s文件,并使用c标志“onlyc=1”构建。通过这种方式,您可以得到一个能与ov_open_回调一起工作的ogg解码器。