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

libpng12.so.0:无法打开共享目标文件:错误的ELF类: ELFCLASS64

libpng12.so.0是一个用于处理PNG图像格式的库文件。它提供了对PNG图像的读取和写入功能,以及对图像进行压缩和解压缩的能力。

这个错误提示"无法打开共享目标文件:错误的ELF类: ELFCLASS64"意味着系统无法加载libpng12.so.0库文件,因为该库文件是32位的,而系统是64位的。这是因为在64位系统上运行32位程序时,需要安装相应的32位库文件。

要解决这个问题,可以尝试以下步骤:

  1. 确认系统架构:首先确认你的系统是64位的。可以通过运行以下命令来检查:uname -m如果输出结果是"x86_64",则表示你的系统是64位的。
  2. 安装32位库文件:在64位系统上运行32位程序需要安装相应的32位库文件。对于libpng12.so.0,你可以尝试安装以下软件包:sudo apt-get install libpng12-0:i386这将安装libpng12.so.0的32位版本。
  3. 更新库缓存:安装完32位库文件后,需要更新库缓存。运行以下命令:sudo ldconfig
  4. 重新运行程序:完成上述步骤后,尝试重新运行程序,应该不再出现"无法打开共享目标文件:错误的ELF类: ELFCLASS64"的错误。

总结:

libpng12.so.0是一个用于处理PNG图像格式的库文件。当在64位系统上运行32位程序时,可能会遇到"无法打开共享目标文件:错误的ELF类: ELFCLASS64"的错误。解决方法是安装相应的32位库文件,并更新库缓存。

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

相关·内容

使用 Office 打开下载 xlsx 格式 Excel 文件报“文件已损坏,无法打开错误问题处理

概述 在使用 Office 打开下载 xlsx 格式 Excel 文件可能会出现报“文件已损坏,无法打开错误问题,出现这种问题原因是因为 Windows 系统会锁定来自网络或其他计算机 xlsx...解决方式二 个人发现另外一种解决方式,是通过修改下载 xlsx 文件属性,来允许打开当前下载文件,来解决“文件已损坏,无法打开问题。...这样做唯一缺点就是,打开每个下载文件都需要单独去修改文件属性,打开多个文件时操作稍有繁琐,但却没有降低系统安全性,保证了要打开文件确实是自己信任文件。...文件报“文件已损坏,无法打开错误问题处理 链接: https://zixizixi.cn/windows-office-open-download-xlsx-excel-error-file-corrupted...来源: iTanken 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可,转载请保留此声明。

4.9K30

使用java命令运行class文件提示“错误:找不到或无法加载主问题分析

“.”意思是搜索当前目录 第二个问题看下面分析: 看下面两个 ?        A   ?  B A和B唯一差别就是没有定义包名。...我们工程路径是D:\HelloWorld,在HelloWorld文件夹中建立一个src文件夹,B源代码文件就放在src中。...按照java规定,我们应该按照package定义路径来存放源文件A应该放入: src\org\will\app\main下,如下: ? 然后我们编译执行: ?...依然有问题,为什么,其实大家再回去看看java书籍就会发现,一个全名应该是包名+名。A全名:org.will.app.main.NewsManager 好,再试试: ? 还是不对。...二、java执行class文件对package路径是强依赖。它在执行时候会严格以当前用户路径为基础,按照package指定包路径转化为文件路径去搜索class文件。各位同学以后注意就OK啦。

5.6K30

OpenCV学习之路–5–OpenCV3.4.10ARM版本移植到开发板

开发板:迅为IMX6Q 移植QTE5.7 编译好ARM版本OpenCV3.4.10文件:OpenCV3.4.10 ARM版 编译好OpenCV依赖库文件:编译好OpenCV ARM版 依赖库...arm-none-linux-gnueabi/opencv-depend/lib/ cp -r * /home/topeet/iMX6Q/qt/lib/ 3.到此,移植就完成了,然后打包rootfs.tgz镜像烧录文件即可...by /lib/libopencv_core.so.3.4) 解决方法: 1.在ubuntu中使用 find / -name "libstdc++.so*" 会出现好多文件,但是我们移植时候需要注意...+.so.6 | grep GLIBC 注意:如果移植成x86-64版本libstdc++.so.6.0.21会出现下面的错误 error while loading shared libraries...: libstdc++.so.6: wrong ELF class: ELFCLASS64 原因是开发板运行ARM版本,结果使用是x86-64版本

1.2K10

Linux 程序编译过程详解

在windows中静态库是以 .lib 为后缀文件共享库是以 .dll 为后缀文件。在linux中静态库是以.a为后缀文件共享库是以.so为后缀文件。...ldd:可以用于查看一个可执行程序依赖共享库。objcopy:将一种对象文件翻译成另一种格式,譬如将.bin转换成.elf、或者将.elf转换成.bin等。objdump:主要作用是反汇编。...处理#include预编译指令,将被包含文件插入到该预编译指令位置。删除所有注释“//”和“/* */”。添加行号和文件标识,以便编译时产生调试用行号及编译错误警告行号。...:hello.o目标文件ELF(Executable and Linkable Format)格式可重定向文件。...由于ELF文件无法被当做普通文本文件打开,如果希望直接查看一个ELF文件包含指令和数据,需要使用反汇编方法。

1.8K30

Linux 程序编译过程来龙去脉

在windows中静态库是以 .lib 为后缀文件共享库是以 .dll 为后缀文件。在linux中静态库是以.a为后缀文件共享库是以.so为后缀文件。...ldd:可以用于查看一个可执行程序依赖共享库。 objcopy:将一种对象文件翻译成另一种格式,譬如将.bin转换成.elf、或者将.elf转换成.bin等。 objdump:主要作用是反汇编。...处理#include预编译指令,将被包含文件插入到该预编译指令位置。 删除所有注释“//”和“/* */”。 添加行号和文件标识,以便编译时产生调试用行号及编译错误警告行号。...注意:hello.o目标文件ELF(Executable and Linkable Format)格式可重定向文件。...由于ELF文件无法被当做普通文本文件打开,如果希望直接查看一个ELF文件包含指令和数据,需要使用反汇编方法。

2.9K30

Linux 程序编译过程详解

1 大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三。...在windows中静态库是以 .lib 为后缀文件共享库是以 .dll 为后缀文件。在linux中静态库是以.a为后缀文件共享库是以.so为后缀文件。...ldd:可以用于查看一个可执行程序依赖共享库。 objcopy:将一种对象文件翻译成另一种格式,譬如将.bin转换成.elf、或者将.elf转换成.bin等。 objdump:主要作用是反汇编。...处理#include预编译指令,将被包含文件插入到该预编译指令位置。 删除所有注释“//”和“/* */”。 添加行号和文件标识,以便编译时产生调试用行号及编译错误警告行号。...反汇编ELF 由于ELF文件无法被当做普通文本文件打开,如果希望直接查看一个ELF文件包含指令和数据,需要使用反汇编方法。

1.8K30

linux装载和启动可执行程序过程

添加行号和文件标识,以便编译时产生调试用行号及编译错误警告行号 保留所有的#pragma编译器指令,因为编译器需要使用它们 编译:gcc -x cpp-output -S -o hello.s hello.cpp...-m32(目标代码) 汇编器是将汇编代码转变成机器可以执行命令,每一个汇编语句几乎都对应一条机器指令 链接:gcc -o hello hello.o -m32 (可执行文件) 通过调用链接器ld来链接程序运行需要一大堆目标文件...在实际可执行程序或者共享目标文件中,GOT表在名称为.got.pltsection中,PLT表在名称为.pltsection中。   ELF文件符号动态解析过程 ?   ...从图中可以看出动态链接使用了共享库,接下来查看共享库: ? 通过gdb调试,我们知道printf实际上是调用了puts函数: ? 用IDA打开动态链接hello文件: ?...可以看到puts函数通过在PLT表0x080482F0位置跳转到GOT表0x0804A00C位置,查看GOT表验证: ? 用IDA打开静态链接hello文件: ?

3K40

吴章金: 如何创建一个*可执行*共享

license: "cc-by-nc-nd-4.0" description: "本文手把手指导如何创建一个可以执行共享目标文件" 前言 前段时间,有多位同学在“泰晓原创团队”微信群聊到 C 语言相关两个问题...先来看看两文件区别 当前 Linux 下面的二进制程序标准格式是 ELF,这类格式可以用来表示 4 种不同类型文件: 可重定位目标文件(.o),用于静态链接 可执行文件格式,用于运行时创建进程映像...共享目标文件(.so,共享库),协同可执行文件创建进程映像 Core dump(core),运行过程中崩溃时自动生成,用于调试 我们来看中间两: 可执行文件 如果不引用外部库函数,那么所有符号地址是确定...可执行文件有标准 C 语言程序执行入口 main,而共享库则并没有这类强制要求 后者为了确保可以灵活被多个可执行文件共享,所以,符号地址在链接时是相对,在装载时动态分配和计算符号地址 接下来做个实验具体看看两者区别...先来回顾一下共享库,在本文第 2 节直接执行时候马上出段错误,基本原因是共享库没有强制提供一个标准 C 程序入口。

1.1K20

CSAPP---第七章-链接

可重定位目标文件格式 elf文件格式如下: elf头信息+节数组+节头部表(描述每个节所在位置) elf头信息如下所示: elf头以一个16个字节序列开始,这个序列描述了生成该文件系统大小和字节顺序...: elf头剩下部分包含帮助链接器语法分析和解释目标文件信息,其中包括: elf头大小,节头部表偏移量,以及节头目表中条目的数量和大小。...如果当链接器完成对命令行上输入文件扫描后,U是非空,那么链接器就会输出一个错误并终止。否则,它会合并和重定位E中目标文件,构建输出可执行文件。...dlsym 函数输入是一个指向前面已经打开共享句柄和一个 symbol 名字,如果该符号存在,就返回符号地址,否则返回 NULL。...多个目标文件可以定义相同符号,而链接器用来悄悄地解析这些多重定义规则可能在用户程序中引入微妙错误。 多个目标文件可以被连接到一个单独静态库中。链接器用库来解析其他目标模块中符号引用。

83910

ELF中可以被修改又不影响执行区域

解释器可以是一个可执行文件,也可以是一个共享目标文件共享目标文件被加载到内存中时,其地址可能在各个进程中呈现不同取值。...系统 在 mmap 以及相关服务所使用动态段区域创建共享目标文件段。因此,共享目标 解释器通常不会与原来可执行文件原始段地址发生冲突。...将可执行文件内存段添加到进程映像中; (2). 把共享目标内存段添加到进程映像中; (3). 为可执行文件和它共享目标执行重定位操作; (4)....目标文件“段”包含一个或者多个“节区”, 也就是“段内容(Segment Contents)”。程序头部仅对于可执行文件共享目标文件 有意义。 看一个实际例子: readelf输出 ?...比如前面看雪那篇文章中提到分离section方式加固中,因为修改了ELF头部中section相关字段,就会导致IDA打开报错。 这些区域可以用来存储自定义内容,甚至是被移除来压缩ELF

2.1K50

KCon议题讲解——进退维谷:runC阿克琉斯之踵

特殊之处在于,如果尝试打开这个文件,在权限检查通过情况下,内核将直接返回一个指向目标文件描述符(file descriptor),而非按照传统打开方式去对符号链接做路径解析和文件查找。...修复后runC执行效果如下,可以看到,容器内攻击者在查看runc init进程打开文件描述符时,已经无法看到指向宿主机文件文件描述符了: shell1% runc run ctr shell2%...4.1 关于ELF文件ELF文件注入简单介绍 ELF文件格式 ELF是Unix和Unix环境下可执行文件共享主要文件格式[23]。...例如,如果目的是使目标程序(如runC)无法使用,注入内容可以是任意——只要破坏原程序结构和逻辑即可。...实际环境中ELF文件注入往往受到载荷内容(如有的场景下0x00作为截断字符无法注入)、载荷长度(如果载荷过长,可能无法插入到原文件内,需要追加到原文件后)、被注入目标文件类型(静态编译还是动态链接,

56330

ELF文件及android hook原理

ELF文件主要有四种类型: 可重定位文件(Relocatable File) 包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件代码和数据。...共享目标文件(Shared Object File) 包含可在两种上下文中链接代码和数据。首先链接编辑器可以将它和其它可重定位文件共享目标文件一起处理,生成另外一个目标文件。...其次,动态链接器(Dynamic Linker)可能将它与某个可执行文件以及其它共享目标一起组合,创建进程映像。...因为ELF目标文件不需要被装载,所以它没有程序头表,而ELF可执行文件共享文件都有。 使用readelf查看程序头表。 ?...地址无关代码(PIC) 装载时重定位是解决动态模块中有绝对地址引用方法之一,但是它有一个很大缺点是指令部分无法在多个进程之间共享,这样就失去了动态链接节省内存一大优势。

3.7K81

使用VisualGDB开发Keil MDK-ARM项目

打开uVision中目标属性,复制编译器控制字符串: ? 指定选项需要分为3: 包括目录和预处理器宏。这些选项对于智能感知很重要。 Keil-specific选项。...如果您在这里输入它们,它将会混淆基于clang智能感知引擎。 按下OK。VisualGDB将重新检查标志并更新智能感知。打开文件,确保没有智能感知错误,语法着色工作正常: ?...在此之前,打开Keil目标选项并注意链接器标志: ? 现在我们将指定特定于keil标志。创建一个名为keil文件。...右键点击main()函数,打开CodeMap,选择“show called functions”来验证Clang智能感知: ? 由Keil链接器生成ELF文件有一个基本问题。...exe将ELF文件转换为.bin文件,以反映Keil工具所期望FLASH内存内容: ? 然后,我们将使用objcopy工具编辑.elf文件,用.bin文件内容替换复制到闪存中数据。

2.3K30

Linux共享库、静态库、动态库详解

1、静态函数库,是在程序执行前就加入到目标程序中去了 ; 2、动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)...创建一个静态函数库文件,或者往一个已经存在地静态函数库文件添加新目标代码,可以用下面的命令: ar rcs my_library.a file1.o file2.o 这个例子中是把目标代码...这个选项在创建ELF格式文件时候,会将所有的符号加入到动态符号表中。可以参考ld帮助获得更详细说明。 3.5. 安装和使用共享函数库 一旦你定义了一个共享函数库,你还需要安装它。...主要区别就是这些函数库不是在程序链接时候或者启动时候加载,而是通过一个API来打开一个函数库,寻找符号表,处理错误和关闭函数库。通常C语言环境下,需要包含这个头文件。...其他Unix系统处理不同情况,但出于同样原因:setuid / setgid程序不应该受到环境变量集不当影响。 3.4。创建共享库 创建共享库很容易。

8.7K10

腾讯极客挑战赛丨从“碰撞”到“爆破”,42次尝试终破纪录

nasm好处在于可以直接生成二进制文件,方便我们定制elf文件头。...定制过程中需要大量翻阅elf文件格式定义,可以在linux教程(https://linux.die.net/man/5/elf)中找到。...: 可执行文件 e_machine: x86_64 e_entry: 入口点 e_phoff: program header文件偏移 e_ehsize: elf头大小,固定为0x40 e_phentsize...,省去了xor edi, edi这句清零(题目需要返回值为0) 企业微信截图_1623238090325.png 为了方便调试,我另外制作了一份debug版本汇编源文件,没有重叠任何elf头。.../zero_res # 这个程序用来计算目标文件n-1个block后结果,并输出完整程序md5值 0xc718942d, 0x27848216, 0x26f99fc3, 0x00000000 96935fafb893d3325b244bfe2ca98908

93130

Linux动态链接库.so文件创建与使用

1、静态函数库,是在程序执行前就加入到目标程序中去了; 2、共享函数库,则是在程序启动时候加载到程序中,它可以被不同程序共享;动态加载函数库则可以在程序运行任何时候动态加载。...静态函数库         静态函数库实际上就是简单一个普通目标文件集合,一般来说习惯用“.a”作为文件后缀。可以用ar这个程序来产生静态函数库文件。Ar是archiver缩写。...创建一个静态函数库文件,或者往一个已经存在地静态函数库文件添加新目标代码,可以用下面的命令:          ar rcs my_library.a file1.o file2.o  这个例子中是把目标代码...这个选项在创建ELF格式文件时候,会将所有的符号加入到动态符号表中。可以参考ld帮助获得更详细说明。 3.5. 安装和使用共享函数库 一旦你定义了一个共享函数库,你还需要安装它。...主要区别就是这些函数库不是在程序链接时候或者启动时候加载,而是通过一个API来打开一个函数库,寻找符号表,处理错误和关闭函数库。通常C语言环境下,需要包含这个头文件

9K51

链接 动态链接 静态链接

要想了解底层,链接是一个不得不过一关,我总结了下学习心得,首先要了解链接器到底是如何工作,链接器分为两,一个是静态链接,一个是动态链接,先来讲解静态链接,静态链接要干两件事: 符号解析 目标文件定义和引用符号...这些目标文件都可以统称为ELF文件:executable and linkable format(可执行和可链接格式)。 从而引入了一个重要知识点:ELF文件格式。...首先是可重定位目标文件ELF文件:从上到下依次是: 可重定位目标文件ELF文件 ELF头部 .text .rodata .data .bss .symtab rel.text rel.data .debug...ELF文件,现在就来看看经过静态链接生成可执行目标文件ELF文件格式,这里面都是以段作为术语: 可执行目标文件ELF文件 ELF头部 段头表 .init .text .rodata .data...共享库也叫共享目标,以.so为结尾,像linux系统提供了dlopen这样函数去加载和链接共享库。 其实.symtab这个存放符号地方也是值得研究,有机会再记录。

2.9K30
领券