【发布时间】:2011-07-17 07:42:35
【问题描述】:
我正在用 llvm-gcc-4.2.1 编译 mplayer。
使用“-O1”(禁用链接时间优化),程序成功编译和链接。使用 '-O2' 或 '-O1 -flto',ld 抱怨未定义的符号:
架构 x86_64 的未定义符号: “_MM_FIX_0_707106781”,引用自: _filter 在 vf_fspp.o “_MM_FIX_0_541196100”,引用自: _filter 在 vf_fspp.o ld:未找到架构 x86_64 的符号 collect2: ld 返回 1 个退出状态fyi,我的 ld 版本:
@(#)PROGRAM:ld PROJECT:ld64-123.2
llvm version 2.9svn, from Apple Clang 2.0 (build 137)
我将只关注 MM_FIX_0_707106781,因为其他常量都遵循相同的过程。
MM_FIX_0_707106781 用宏初始化:
DECLARE_ASM_CONST(8, uint64_t, MM_FIX_0_707106781)=FIX64(0.707106781, 14);
计算结果为:
static const uint64_t __attribute__((used, aligned (8))) MM_FIX_0_707106781=0x2d412d412d412d41;
这些常量在 asm 代码中使用:
#define MANGLE(a) "_" #a "(%%rip)" __asm__ 易失性( ... "pmulhw "MANGLE(MM_FIX_0_707106781)", %%mm7 \n\t" ... );我有一个与 asm 函数类似(相同?)的问题,我可以通过添加以下内容来解决:".globl "LABLE_MANGLE(functionnamehere)"\n\t"
在每个标签之前,但这些知识并没有帮助我处理这些 ASM 常量。
恐怕这是我能提供的尽可能多的信息。再次,使用 -O1 代码编译、链接和运行。使用 -O2 时,链接器无法找到这些 asm 常量。
谁能提供这个问题的解决方案?谢谢。
【问题讨论】:
标签: assembly constants undefined llvm symbols