链接时间优化导致的问题是带有ASM常量的未定义符号
||
我正在用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退出状态
仅供参考,我的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__ volatile(
...
\“ pmulhw \” MANGLE(MM_FIX_0_707106781)\“,%% mm7 \\ n \\ t \”
...
);
我在添加asm函数时遇到了类似(相同)的问题,可以通过添加以下内容来解决:
\".globl \"LABLE_MANGLE(functionnamehere)\"\\n\\t\"
在每个标签之前,但是这些知识并没有帮助我使用这些ASM常量。
恐怕我将提供尽可能多的信息。再次使用-O1进行代码编译,链接和运行。使用-O2时,链接程序无法找到这些asm常量。
谁能提供解决这个问题的方法?谢谢。
没有找到相关结果
已邀请:
4 个回复
恋卡
梦话快家腹
骂狮淋唐便
,这意味着内联汇编和符号都在同一模块中,这是一个不同的错误。
念炯