首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

g ++链接器:/usr/lib/libGL.so.1:无法读取符号:无效的操作

g++链接器是GNU编译器套件(GCC)中的一个工具,用于将多个目标文件链接在一起生成可执行文件。在链接过程中,如果遇到无法读取符号或无效操作的错误,可能是由于缺少相关的库文件或者库文件版本不匹配所导致的。

针对这个错误,可以采取以下几个步骤进行排查和解决:

  1. 确认库文件是否存在:检查系统中是否存在所需的库文件libGL.so.1。可以使用以下命令进行查找:find / -name libGL.so.1如果找到了该库文件,可以进入下一步。如果没有找到,可能需要安装相应的库文件。
  2. 确认库文件路径是否正确:检查库文件libGL.so.1的路径是否正确。可以使用以下命令查看链接器的搜索路径:echo $LD_LIBRARY_PATH如果库文件所在的路径不在搜索路径中,可以通过以下方式添加:export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH其中,/path/to/library是库文件所在的路径。
  3. 确认库文件版本是否匹配:如果库文件存在且路径正确,但仍然出现无效操作的错误,可能是由于库文件版本不匹配所导致的。可以尝试更新或重新安装相关的库文件。

总结:

g++链接器是GCC编译器套件中的一个工具,用于将多个目标文件链接在一起生成可执行文件。当出现无法读取符号和无效操作的错误时,需要检查库文件是否存在、路径是否正确以及版本是否匹配。根据具体情况进行排查和解决。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ubuntu18.04 安装qt5.12.8及环境配置详细教程

找到原因了 Qt 默认在 /usr/lib/ 目录下查找动态链接库,但是很多 Linux 发行版将 OpenGL 链接库放在其它目录,例如我使用是 CentOS 7,OpenGL 链接库位于 /usr...另外,Linux 发行版自带 OpenGL 链接库在后缀中添加了版本号,例如 libGL.so.1、libGL.so.1.2.0、libGL.so.1.3.1 等,但是 Qt 在链接阶段查找 OpenGL...总起来说,我们需要在 /usr/lib/ 目录下为 OpenGL 链接库创建一个链接,并去掉版本号。...按照方法进行操作: #查找 libGL 所在位置 # locate libGL /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu...#sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/libGL.so 再次运行>>>>>>>>>>>>>>成功 ?

5.2K31

QEMU 编译报错 undefined reference to g_app_info_launch_default_for_uri_finish 解决过程

) libz.so.1 => /lib64/libz.so.1 (0x00007f198d6d1000) libGL.so.1 => /lib64/libGL.so.1...) 观察输出,所有依赖动态链接库都有指向一个内存地址,说明所依赖链接库都已经被加载入内存,排除了链接库不存在情况,下面就有可能是某个链接库有问题了,接下来做两件事: 使用 objdump -T |grep 命令检索报错函数属于哪一个链接库; 使用 find / -name 命令查找是否有哪一个报错链接库在系统动态链接库搜索目录中有多个.../libgio-2.0.so ,其中 /lib64 为系统默认链接库存放位置,而 /usr/local 为编译安装库默认安装位置,移除/usr/local/lib/libgio-2.0.so 之后再次尝试编译发现报错减少了...总结# 本次编译错误排查了很久,最后在大佬协助下终于解决,此类缺少依赖错误排查错误思路可以总结为 检查链接库是否存在 -> 检查是否存在重复链接库 -> 移除错误链接库 。

41220
  • Linux命令(65)——ld命令

    这告诉动态链接,正在创建共享对象符号表应该用作共享对象名称符号筛选。 -g:被忽略。...这仅在生成动态链接ELF可执行文件时才有意义。默认动态链接通常是正确,除非您知道正在做什么,否则不要使用该选项。...-M,--print-map:显示链接映射,用于诊断目的 -Map=: 将链接映射输出到指定文件 -m : 模拟指定链接 -N,--omagic: 指定读取...当链接大型可执行文件时,如果ld耗尽内存空间,则可能需要使用该选项 -O :对于非零优化等级,ld将优化输出。此操作会比较耗时,应该在生成最终结果时使用。...=:从指定文件读取符号名称和地址 -r,--relocatable:生成可重定位输出(称为部分连接) -rpath=:把指定目录添加到运行时库搜索路径 -rpath-link

    17.5K13

    如何优雅调试段错误

    bit1: 值为 1 表示是写操作导致内存访问越界,值为 0 表示是读操作导致内存访问越界。...整行代码意思要把 rdi 寄存某个偏移处数据复制给 eax 寄存,前面我们知道引起错误原因是 用户态程序,读内存越界,原因是非法地址,而不是没权限,所以就是说读取 0xc0(%rdi) 发生错误...由此我们大概知道这里是读取函数第一个参数某个偏移量,推测第一个参数是一个结构,这个偏移量是结构某个成员,而这个结构地址目前是个无效地址,所以取偏移量会引起读取内存出错。...libc 调试符号: $ locate libc-2.27.so /lib/i386-linux-gnu/libc-2.27.so /lib/x86_64-linux-gnu/libc-2.27.so.../usr/lib/debug/lib/x86_64-linux-gnu/libc-2.27.so 发现 /usr/lib/debug/lib/x86_64-linux-gnu/  下有一个 libc

    4.6K52

    Linux目录及文件相关知识整理

    x 表示拥有此权限用户可以进入该目录中,无法进入该目录便不能读取目录中文件中内容,但是如果有目录 r 权限,是可以查看文件及目录列表,注意这两者区别,x 是文件内容,r 是文件名称。...符号类型 使用符号 u,g,o 来代表 User(Owner),Group,Other,通过给这三个符号赋值(=),加入(+),除去(-) rwx 来设置权限,另外还可以使用 a 表示所有用户(All)...某些不被一般使用者惯用可执行文件或脚本目录,如 X 图形窗口下面的操作指令 /usr/local 软件安装目录 /usr/sbin 非系统正常运行所需要系统指令...包括下面这些: /bin -> /usr/bin /sbin -> /usr/sbin /lib -> /usr/lib /lib64 -> /usr/lib64 /var/lock -> /run/lock...:若来源文件为链接文件属性(link file),则复制链接文件属性而非文件本身 -f :为强制(force)意思,若目标文件已经存在且无法打开,则移除后再尝试一次 -i :若目标文件(destination

    1.3K40

    使用编译

    命令行编译会自动从文件系统中读取导入文件,但也可以按照以下方式使用prefix = path来提供路径重定向: solc github.com/ethereum/dapp-bin/=/usr/local.../lib/dapp-bin/ =/usr/local/lib/fallback file.sol 这本质上指示编译搜索以/usr/local/lib/dapp-bin下github.com/ethereum.../dapp-bin/开头任何内容,如果它没有在那里找到该文件,它将查看/usr/local/lib/fallback(空前缀总是匹配)。...如果使用选项--link调用solc,则所有输入文件被解释为以上给出__LibraryName ____格式链接二进制文件(十六进制编码),并就地链接(如果从stdin读取输入,则将其写入 到标准输出...DeclarationError:无效无法解析或冲突标识符名称。例如标识符未找到 TypeError:类型系统中错误,例如无效类型转换,无效赋值等。

    1.4K20

    linux动态库和静态库

    通常这样做就可以解决库无法链接问题了。 二、静态库链接时搜索路径顺序: 1. ld会去找gcc/g++命令中参数-L; 2....再找默认库目录 /lib /usr/lib /usr/local/lib,这是当初compile gcc时写在程序内。 三、动态链接时、执行时搜索路径顺序: 1....一、静态库解析符号引用: 链接ld是如何使用静态库来解析引用。在符号解析阶段,链接从左至右,依次扫描可重定位目标文件(*.o)和静态库(*.a)。...在这个过程中,链接将维持三个集合: 集合E:可重定位目标文件(*.o文件)集合。 集合U:未解析(未定义)符号集,即符号表中UNDEF符号。...2、如果f是一个静态库(.a),那么链接将尝试匹配U中未解析符号与静态库成员(静态库成员就是.o文件)定义符号

    12.4K20

    i.MX6ULL嵌入式Linux开发4-根文件系统构建

    proc里面的文件都是临时存在,一般用来存储系统运行信息文件 /usr 注意,usr不是user缩写,而是Unix Software Resource缩写,即Unix操作系统软件资源目录。...lib库文件从交叉编译中获取,之前搭建交叉编译环境时候将交叉编译存放到了“/usr/local/arm/”目录中,进入对应目录: cd /usr/local/arm/gcc-linaro-4.9.4.../lib/ -d 后面的“-d”表示拷贝符号链接,这里有个比较特殊库文件:ld-linux-armhf.so.3,此库文件也是个符号链接,相当于 Windows 下快捷方式。...但是,ld-linux-armhf.so.3不能作为符号链接,否则的话在根文件系统中执行程序无法执行!所以我们需要重新复制ld-linux- armhf.so.3,替换掉这个软链接。...尝试换用其它串口软件(SecureCRT)来操作无效) 3.2.3 有效解决方法 最后,参考这篇博文:https://blog.csdn.net/InFoport/article/details/

    1.1K50

    如何通过solc编译solidity编写以太坊智能合约

    命令行编译会自动读取需要导入文件,也可以通过使用prefix = path来指定路径,例如: solc github.com/ethereum/dapp-bin/=/usr/local/lib/dapp-bin.../ =/usr/local/lib/fallback file.sol 这样编译就会从指定目录github.com/ethereum/dapp-bin/下/usr/local/lib/dapp-bin.../目录开始搜索,如果没有找到文件,它将查看/usr/local/lib/fallback。...如果用选项--link调用Solc,则所有输入文件都被解释为未链接二进制文件(HEX编码),在上面给出__LibraryName____格式中,将其链接到适当地址(如果从stdin读取输入,则将其写入...Exception:例外,编译过程中未知故障,这应该作为一个问题反馈。 CompilerError:编译错误,编译堆栈使用无效,这应该作为一个问题来反馈。

    2.4K10

    ELF文件及android hook原理

    这个数组第一个元素,也就是下标为0元素为无效”未定义”符号。 他们定义如下: ?...第二步 符号解析与重定位 使用第一步中收集到信息,读取输入文件中段数据、重定位信息,并且进行符号解析与重定位、调整代码中地址等 使用ld链接将”a.o”和”b.o”链接起来: $ld a.o b.o...进程建立需要做下面三件事情: 创建一个独立虚拟地址空间 读取可执行文件头,并且建立虚拟空间与可执行文件映射关系。 将CPU指令寄存设置成可执行文件入口地址,启动运行。...与普通程序不同是,动态链接模块装载地址是从地址0x00000000开始,这个地址是无效,共享对象最终装载地址在编译时时不确定,而是在装载时,装载根据当前地址空间空前情况,动态分配一块足够大小虚拟地址空间给相应共享对象...地址无关代码(PIC) 装载时重定位是解决动态模块中有绝对地址引用方法之一,但是它有一个很大缺点是指令部分无法在多个进程之间共享,这样就失去了动态链接节省内存一大优势。

    3.9K81

    【Linux】《how linux work》第二章 基本命令和目录层次结构(3)

    例如,要将组(g)和其他(o,表示“其他人”)读取(r)权限添加到文件中,可以运行以下两个命令:$ chmod g+r file$ chmod o+r fileOr you could do it all...符号链接可以快速访问晦涩目录路径。...另一个问题是,仅仅通过查看链接名称,您无法确定链接目标的特性;您必须跟随链接以查看它指向是文件还是目录。您系统还可能存在指向其他链接链接,这被称为链接链。...如果在创建指向目录符号链接时出现问题,请检查该目录是否存在错误符号链接并将其删除。...如果没有使用该选项,ln命令会创建一个硬链接,为单个文件提供一个额外真实文件名。新文件名具有旧文件名状态;它直接指向文件数据,而不像符号链接那样指向另一个文件名。硬链接可能比符号链接更令人困惑。

    9310

    基于嵌入式车载导航定位系统设计

    希望车载导航系统能够具备更高定位精度、更丰富地图信息、更便捷操作体验以及更强可扩展性。...主控开发板选用GEC6818开发板,其高性能处理和嵌入式Linux系统为系统稳定运行提供了有力支持。GPS模块选用北斗GPS模块,以确保定位准确性和稳定性。.../lib/x86_64-linux-gnu/mesa/libGL.so.1 //如果提示这两行, 说明系统有这个库 /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0...下面只需要做一个链接即可: sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so 如果系统里没有查找到库, 就在命令行敲下面命令进行在线安装...(2)打开音频文件并循环读取文件中数据,每次将一定数量数据写入PCM设备进行播放。在播放过程中,如果发生错误们需要重新配置PCM设备并重新开始播放。

    40000

    Linux下动态库(.so)和静态库(.a) 区别

    动态函数库改变并不影响你程序,所以动态函数库升级比较方便 不同UNIX系统,链接动态库方法,实现细节不一样 编译PIC型.o中间文件方法一般是采用C语言编译-KPIC或者-fpic选项...,有的UNIX版本C语言编译默认带上了PIC标准.创建最终动态库方法一般采用C语言编译-G或者-shared选项,或者直接使用工具ld创建。...最主要是GCC命令行一个选项: -shared 该选项指定生成动态连接库(让连接生成T类型导出符号表,有时候也生成弱连接W类型导出符号),不用该标志外部程序无法连接。...:表示要连接库在当前目录中 -ltest:编译查找动态连接库时有隐含命名规则,即在给出名字前面加上lib,后面加上.so来确定库名称 LD_LIBRARY_PATH:这个环境变量指示动态连接可以装载动态库路径.../libd.so (0xb7f0f000)  //这个动态库文件比静态编译多         libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e2b000

    17.1K21

    Docker疑难杂症汇总一

    Docker 迁移存储目录 默认情况系统会将 Docker 容器存放在 /var/lib/docker 目录下 问题起因:今天通过监控系统,发现公司其中一台服务磁盘快慢,随即上去看了下,发现 /var...$ sudo mv /var/lib/docker /data/ # 3.添加软链接 $ sudo ln -s /data/docker /var/lib/docker # 4.启动docker服务...289G 179G 62% /mnt 如果发现真的是物理磁盘空间满了的话,就需要查看到底是什么占据了如此大空间,导致因为容器没有空间无法启动。...解决方法也很简单,第一就是清理无效数据文件释放磁盘空间(清除日志),第二就是修改 docker 数据存放路径(大分区)。...操作系统读取硬盘时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(block)。这种由多个扇区组成块,是文件存取最小单位。

    74130
    领券