链接时间优化导致的问题是带有ASM常量的未定义符号

如何解决链接时间优化导致的问题是带有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常量。 谁能提供解决这个问题的方法?谢谢。     

解决方法

感谢所有花时间考虑我的问题的人,但是我才意识到自己搞砸了编译工具,现在能够正常编译了。 问题是,mplayer使脚本调用\'cc \'进行编译,期望cc == gcc。我的系统不是这种情况; cc被链接到gcc的某些不同版本。一旦我将cc符号链接到gcc,就可以使用-O4进行编译(在默认的mplayer configure脚本中设置)。 结论:配置不正确的编译器工具在链接时引起冲突。通过在构建的所有阶段使用相同的编译器来解决。 编辑:实际上llvm-gcc仍然会因-O4失败,但是其他编译器(gcc-4.5.2和gcc42,这是Apple的gcc版本)成功了。其他两个编译器都不接受-flto标志,因此链接时间优化仍然失败。我至少很高兴可以使用-O2,-O3等进行编译,这是促使我提出这个问题的主要原因。 当然,我希望能够使用llvm-gcc编译器(在-O1以上的水平),但是您应该考虑半解决此问题,因为其他两个编译器正在与此代码一起正常工作。     ,好吧,这绝对是一个错误。如果您认为这是编译器错误,则可以选择以下几种方法: 向Apple的bugtracker报告,因为您似乎正在使用XCode附带的llvm-gcc 尝试获取树顶的llvm和llvm-gcc(到现在为止,btw已弃用),并尝试重现该问题(或替代地,获取clang)。如果复制-请填写LLVM PR。 这通常是处理编译器错误的方式:) 但是,在我看来,该错误在源代码中。在这里,您假设最终对象中与此静态常量对应的符号名称将采用某种形式。通常这是实现定义的东西,编译器可以以任意方式更改名称(因为它是静态的,因此-在外部不可见)。 尝试删除\“ static \”,并检查是否仍然存在该问题。或者(这是正确的方法),您应该修复内联汇编程序,并通过内联汇编程序操作数提供常量。     ,llvm-link中有一个错误-它不考虑来自嵌入式asm的符号。除了从C中同一模块的某个地方引用相同的符号外,我不知道任何合适的解决方法。如果您要进行单独的编译,那么这不是问题,因为使用了本机链接程序。对于LTO,将使用LLVM链接器,这是有缺陷的。 编辑:我没有注意到
static
,这意味着内联汇编和符号都在同一模块中,这是一个不同的错误。     ,以下允许ffmpeg-0.8在我的系统上编译:
./configure --cc=i686-apple-darwin10-gcc-4.2.1 --enable-gpl --enable-nonfree
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-