Ubuntu 16.04 64 位下编译 32 位程序

跟踪分析Linux内核5.0系统调用处理过程 - 1 #define __NR_pipe 42 阅读详情

Ubuntu 16.04 64 位下编译 32 位程序

问题产生

博主最近需要在 Ubuntu 16.04 64 位环境下编译用于目标机的 32 位程序,可是直接在使用 gcc 编译时遇到了问题:

gcc hello.c -m32

错误提示:

/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-linux-gnu/5/libgcc.a 时跳过不兼容的 -lgcc
/usr/bin/ld: 找不到 -lgcc
/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-linux-gnu/5/libgcc_s.so 时跳过不兼容的 -lgcc_s
/usr/bin/ld: 找不到 -lgcc_s

根据网上方法,已经安装了:

sudo apt-get install lib32ncurses5 ​lib32z1

但是仍然出现上述问题。由于新版 Ubuntu 16.04 不支持安装 ia32-libs,因此就想能否有其他办法解决。

解决思路

看到报错提示时我就觉得奇怪,既然已经指明了 -m32 选项,为何 gcc 还会去 /usr/lib/gcc/x86_64-linux-gnu/ 这个路径下去找库呢,于是怀着好奇去查了一下……果然博主的系统里面根本就没有 32 位的库文件,静态库和动态库都没有……于是就知道肯定是缺少依赖造成的……

解决方法

经检查,是博主刚装的新双系统的 Ubuntu 16.04 还缺少几个依赖:

sudo apt-get install build-essential module-assistant gcc-multilib g++-multilib  

安装完成后,再次用 32 位模式编译,果然编译成功:

$ ls 
hello.c  Makefile
$ make 
gcc hello.c -m32
$ ls 
a.out  hello.c  Makefile
$ file a.out 
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=6660bedaa65f938439ff9c46489eff2860fe8cf6, not stripped
$ ./a.out 
hello

个人主页
2019.1.3

Ubuntu 16.04(64bit)嵌入式交叉编译环境搭建arm-linux-gcc使用 1.把压缩包arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz放在一个文件夹下,然后在终端进入到该文件夹,将该压缩包解压到所需的目录下(我解压在了根目录下) 下面是tar命令的描述 2.然后改变环境变量,能使arm-linux-gcc能直接运行。 输入 gedit /root/.bashrc 然后在文件中加入 export PATH=”$PATH:/op 阅读详情

相关推荐

Ubuntu 搭建 ARM 交叉编译环境

Ubuntu 搭建 ARM 交叉编译环境准备环境配置 ARM解压配置环境变量使环境变量生效并验证编译测试 准备环境 环境:Ubuntu16.04X64 下载:arm-linux-gcc-4.4.3.tar.gz 注意: arm-linux-gcc-4.4.3.tar.gz是32位,如果使用的系统是Ubuntu 32bit。则可以直接进行环境搭建。如果 系统是Ubuntu 64bit,需要给系统安装32bit的依赖库: sudo apt-get install libc6:i386 sudo apt-g

wzfgd的博客 4369

64位的GCC 编译32位程序

64位的GCC 编译32位程序 编译32的程序,只需要加上-m32就可以了 gcc -m32 llong.c 但是提示下面的错误 /usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-linux-gnu/5/libgcc.a 时跳过不兼容的 -lgcc /usr/bin/ld: 找不到 -lgcc /usr/bin/ld: 当搜索用于 /usr/lib/g

云淡风轻 4万+

深入解析MATLAB四旋翼仿真案例asbQuadcopter的核心模块与优化技巧

本文深入解析了MATLAB/Simulink中的四旋翼无人机官方案例asbQuadcopter,详细拆解了其指令、传感器、控制器、本体与环境等核心模块的工作原理。重点探讨了经典的PID双环控制结构、传感器噪声模拟、模型替换方法以及系统化的PID参数调优技巧,旨在帮助用户从“开箱即用”过渡到深度定制与优化,构建更精准的仿真模型。

weixin_29171087的博客 360

Ubuntu16.04(64bit)兼容32bit程序

Ubuntu16.04(64bit)兼容32bit程序 版权声明:本文为博主原创文章,未经博主允许不得转载。 0 前言     使用Ubuntu16.04(64bit)进行嵌入式开发时,默认情况下无法正常运行32位的交叉编译工具链,因此需要安装额外兼容包。 1 运行32bit程序     若只是需要在Ubuntu16.04(64bit)中运行32bit程序,

花园王国---Garden kingdom 2233

freeswitch之呼叫中心acd模块开发

一、定义: ACD(Automatic Call Distributor) 自动呼叫分配,也叫智能选择座席。它是呼叫中心整个前台接入系统逻辑功能的描述:把接入的呼叫转接到正确的座席员桌前。ACD是现代呼叫中心有别于一般的热线电话系统和自动应答系统的重要标志,其性能的优劣直接影响到呼叫中心的效率和顾客的满意度。 二、ACD包含的功能点: 1 、程控交换功能 ACD在本质上也是交换机的一种类型,必须具有程控交换最基本的话务交换功能。 2 、排队功能 ACD必须具有话务排队的功能,所谓排队是指在内线都

飞鸟的博客 1870

深入解析Cuk、Zeta和Sepic拓扑:非隔离型开关电源的设计奥秘

本文深入解析了Cuk、Zeta和Sepic三种非隔离型开关电源拓扑的设计奥秘。它们均能实现升降压转换,但特性各异:Cuk拓扑输出反向电压,输入输出纹波极低;Sepic拓扑输出同极性电压,应用广泛;Zeta拓扑输出纹波小,适合精密供电。文章详细对比了其电路结构、工作原理、核心公式及选型指南,帮助工程师根据输入电压范围、输出极性及纹波要求,灵活选择最合适的拓扑方案。

weixin_28308325的博客 476

【c++】c++ 编译链接时提醒 搜索动态库 -lxxxx 时跳过不兼容的libxxx.so

这个问题的表现是——在通过g++或者gcc编译链接可执行程序的时候因为代码使用需要,需要添加对应 的三方库,这个时候在编译指令中 需要添加 动态库添加指令 告诉 ld 链接 对应名称的动态库、或者静态库。而在 ld 去指定路径下寻找时,这个路径下存在对应的动态库、静态库但是 这个时候,显示连接失败,这里以 我所使用的剑桥库。说的是 库编译时的操作系统位数 和 链接库时 代码的编译环境下操作系统位数 ,两者不一致。如果没有条件编译库文件,请修改 指定库文件 为对应位数下的库文件。

ALex_zry的博客 8856

OFDM调制matlab仿真详细代码

MATLAB仿真代码 % ================================================== % 作者: 肆拾伍 % 时间:11/30 2019 % 版本:V3 % =================OFDM仿真参数说明:================ % % 子载波数 carrier_count ---200 % 总符号数 symbol_count ...

肆拾伍的博客 3万+

【Linux动态库.so/ELF文件】链接报错:/usr/bin/ld: 当搜索用于 .//libzlog.so 时跳过不兼容的 -lzlog

动态库so,ELF文件

J_KILL_P的博客 4181

【知识分享】CAN总线中终端网络的重要性

P沟道和N沟道晶体管的漏源通态电阻匹配良好时,形成的CANH和CANL信号匹配良好;如果驱动器的一半具有比另一半低得多的导通状态电阻,那么总线共模电压将从VCC/2的显性状态偏离,并回到VCC/2的隐性状态,这将导致每一次状态转换都会伴随着共模电压噪声,从而导致更高水平的传导和辐射能量发射。

一只豌豆象的博客 1543

修改 Alist 密码时报错?看看这个坑怎么解决!

启动服务后,再修改密码”。以后再遇到类似问题,先检查服务是否正常运行,说不定就能少踩不少坑。如果还有其他 Alist 的问题,欢迎在评论区留言交流~

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1154

Ubuntu 64位兼容32位

使用Ubuntu16.04(64bit)进行嵌入式开发时,默认情况下无法正常运行32位的交叉编译工具链,因此需要安装额外兼容包。

OneSea 2万+

基于YOLOv8的植物生长阶段识别系统设计与实现

本文详细介绍了一个基于YOLOv8深度学习模型的植物生长阶段识别系统,包含完整的数据集构建、模型训练、评估以及基于PyQt5的用户界面开发过程。系统能够自动识别植物在不同生长阶段(如发芽期、生长期、开花期、结果期等)的形态特征,为精准农业和智能种植提供技术支持。文章提供了完整的代码实现,并讨论了模型优化策略和实际应用场景。关键词:植物生长阶段识别、YOLOv8、目标检测、PyQt5、深度学习。

YOLO 465

ubuntu:fatal error: sys/cdefs.h: 没有那个文件或目录

使用64位Ubuntu编译生成32位程序,在编译过程中报出这个错误。 解决方法:主要是下载32位的编译库。可以安装: sudo apt-get install lib32readline-gplv2-dev 我使用的是Ubuntu16.04 64位系统,这个方法没有作用,还需要安装: sudo apt-get install gcc-4.8-multilib g++-4.8-multilib ...

qilimi1053620912的博客 5987

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

在Ubuntu下编译Qt错误及处理办法

平台:Ubuntu16.04 64bit 虚拟机:VirtualBOX 编译软件:Qt 32bit (在64位环境下编译32bit的程序会出现很多错误,从编译器的安装以及整个库的编译) 问题一:error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or ...

weixin_30664615的博客 575

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Ubuntu16.04中printf函数无法正常打印问题

这是因为Ubuntu16.04中64位编译32位不成功的原因 实际情景就是用printf函数打印第一个变量都可以,但后面的参数都打印不出来。而且各个变量类型所占字节数和老师也不一样。 百度说在打印的时候加上-m32还是不好使,会出现如下情况 最后再一个博客中找到原因: 如果你是高版本的gcc(可能是由于更新内核造成的),可能简单的使用-m32 的时候会提示以下错误(使用别人的历程,自己未曾遇...

weixin_45479946的博客 1766

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《自制编译器》的环境配置并运行第一个程序

看一下Linux发行版本号,自己的电脑师Ubuntu 16.04.6。执行shell脚本。

qq_42108074的博客 246

No such file or directory及解决方法

背景: 1.新安装的ubuntu16.04LTS 2.编译uboot时提示: arm-none-linux-gnueabi-gcc -v bash: /home/zz/work/vz/src/trunk/build/../prebuilds/toolchain/arm-none-linux-gnueabi-4.3.3/bin/arm-none-linux-gnueabi-gcc: No such ...

heima201907的博客 1万+

[问题-已解决!] arm-none-linux-gnueabi-gcc-4.4.1: No such file or directory

Ubuntu16.04 环境下,安装好arm-2009q3.tar.bz2后使用命令arm-none-linux-gnueabi-gcc-4.4.1-ohelloworldhelloworld.c-static编译helloworld.c文件出现以下错误。 bash: /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc-4.4...

羊脂球的博客 1278

嵌入式Linux开发环境搭建

嵌入式Linux开发环境搭建: 步骤: 一、 Ubantu基本工具安装(版本16.04) 二、 安装交叉编译工具链 一.Ubantu配置: 1.安装vmware和ubantu 具体方法百度 vmware网络配置: (1) NAT模式:相当于与主机共享ip (2) 桥接模式:相当于一台独立主机 2.更新ubantu数据: 指令:sudo apt-get update 3.ubantu安装vim: 指令:sudo apt-get install vim 4.ubantu安装gcc: 指令:sudo apt

jilangdada的博客 952

64位Ubuntu上编译32位程序

1.确认主机为64位架构的内核,应该输出为adm64,执行:$ dpkg --print-architecture2.确认打开了多支架功能,应该输出为i386,执行:$ dpkg --print-foreign-architectures如果没有,则需要手动打开,依次执行:$ sudo dpkg --add-architecture i386 $ sudo apt-get update $

编程小栈 6061

ubuntu16.04 64位系统使用32位交叉编译器 的问题

在ubuntu16.04的64位系统上安装32位交叉编译工具链,建好软连接后,发现无法使用,显示No such file or directory。 解决方法: 需要安装 aptitude 软件 aptitude install libc6:i386 选择: n y y 安装完成后,测试可用。 后来有发现其它解决方式,但未测试,记录,备用,如下 : apt-get install lib32ncurses5 ​ apt-get install lib32z1​ ...

vincent3678的博客 556

ubuntu 16.04 64位兼容32位程序三步

第一步:确认自己系统的架构 dpkg --print-architecture 输出: amd64 结果为 amd64 表示系统是64位的 第二步:确认打开了多架构支持功能 dpkg --print-foreign-architectures 输出: i386 如果这里没有输出i386,则需要打开多架构支持 sudo dpkg --add-architecture i386 sudo apt-get update 第三步:安装对应的32位的库 sudo apt-get install lib32z1 lib

weixin_45930312的博客 593

64bit ubuntu 16.04 安装海思编译32位工具链

获取海思编译工具链 想办法获得Hi3519V101R001C02SPC022.rar工具包。 配置全部的环境可以参考 该博客,这里只是介绍一些在配置交叉编译工具链时遇到的坑。 确定Ubuntu操作系统位数 使用uname -a命令来确定Ubuntu操作系统的版本,如果确定为32bit,那就无需进行后面安装32bit库的过程。 如有类似如下的显示,那么你的操作系统就是64bit的,可以根据...

听枫烨阁的博客 4279

linux 64位 内核编译环境,ubuntu16.4(64位)编译运行32位程序,gcc3.4,编译linux.11源代码...

Linux0.11内核需要用到gcc3.4版本,以及bochs模拟器用来模拟运行编译后的系统。这里用到的环境是ubuntu16.04 64位。安装编译环境打开 32 位支持sudo dpkg --add-architecture i386sudo apt-get updatesudo apt-get install lib32ncurses5 lib32z1123sudodpkg--add-arc...

weixin_42467896的博客 250
上一篇: Nginx 指定域名(或子域名)和网站绑定
下一篇: Windows 平台下打包 bzip2 和 gzip 格式压缩包
造轮使者
博客等级 码龄9年 30粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值