linux 64位操作系统环境下用gcc、g++编译32位程序

news/2024/11/28 20:54:43/

在linux 64位操作系统环境下,默认编译生成的可执行文件是64位的。今天由于测试验证需要,需要将程序编译成32位的可执行文件,碰到了一些问题,下面做一下记录。

gcc、g++编译时,增加下列参数之一:

-m32  :将int,long和指针设为32位,适用于i386
-m64  :将int设为32位,long和指针设为64位,适用于X86-64
-mx32 :将int,long和指针设为32位,适用于X86-64

我们有一个test.c,有一个test.cpp,功能都是打印:Hello World

gcc

gcc test.c -m32 -o test //出现致命错误:gnu/stubs-32.h:没有那个文件或目录

In file included from /usr/include/features.h:399:0,

from /usr/include/stdio.h:27,

from test.c:1:

/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录

# include <gnu/stubs-32.h>

^

编译中断。

yum install -y glibc-devel.i686 //安装32位glibc C开发库解决

我们再执行以下命令编译test.c又出错

gcc test.c -m32 -o test //出错如下

/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc_s.so 时跳过不兼容的 -lgcc_s

/usr/bin/ld: 找不到 -lgcc_s

collect2: 错误:ld 返回 1

yum install -y libgcc.i686 //安装32位libgcc_s.so共享库解决

我们再执行以下命令编译test.c

gcc test.c -m32 -o test //ok

g++

g++ test.cpp -m32 -o test //出错如下

/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-redhat-linux/4.8.5/libstdc++.so 时跳过不兼容的 -lstdc++

/usr/bin/ld: 找不到 -lstdc++

collect2: 错误:ld 返回 1

yum install -y libstdc++-devel.i686 //安装32位C++开发库解决

我们再执行以下命令编译test.cpp

g++ test.cpp -m32 -o test //ok

参考链接:https://stackoverflow.com/questions/23638271/how-to-compile-32-bit-apps-on-64-bit-rhel


http://www.ppmy.cn/news/181352.html

相关文章

Cygwin+OSgeo4w安装

CygwinOSGeo4W安装 一、Cygwin和OSGeo4W介绍 二、Cygwin安装 三、OSGeo4W安装 几乎所有的开源GIS项目都在某种程度上使用GDAL来读写数据&#xff0c;但是因为Windows是一个封闭的平台&#xff0c;所以它没有像基于Unix的操作系统那样开发软件包管理器。鉴于此&#xff0c;在Uni…

GD32硬件IIC

GD32E230硬件IIC 我们熟悉IIC都是使用软件代码的形式模拟时序图来编程 现在使用GD32E230中的HAL库中硬件IIC模式IIC。的总线机制都是一种两线接口、简单、双向二线制同步的串行总线&#xff0c;二线制就是时钟线(SCL)和数据线(SDA)两个信号线。IIC寻址时分为主从设备之分&#…

Intel SGX Explained

文章目录 SGX新增第二章 Intel体系架构背景知识Overview计算模型软件权限级别地址空间地址转换 第五章 SGX Programming Medol5.1 SGX物理内存组织5.1.1 The Enclave Page Cache&#xff08;EPC&#xff09;5.1.2 The Enclave Page Cache Map&#xff08;EPCM&#xff09;5.1.3…

读改变未来的九大算法笔记02_数据库

1. 基础思想 1.1. 预写日志记录 1.2. 两阶段提交 1.3. 关系数据库 2. 两个事实 2.1. 计算机程序会崩溃 2.1.1. 当一个程序崩溃时&#xff0c;它会丢掉所有正在处理的东西 2.1.2. 只有安放在计算机文件系统中的信息会得到保存 2.1.3. 崩溃相当宽泛&#xff1a;包括任何可…

【车间调度】基于matlab GUI遗传算法求解车间调度问题【含Matlab源码 049期】

⛄一、车间调度简介 作业车间调度问题&#xff08;Job Shop Scheduling, JSP&#xff09;是最经典的几个NP-hard问题之一。其应用领域极其广泛&#xff0c;涉及航母调度&#xff0c;机场飞机调度&#xff0c;港口码头货船调度&#xff0c;汽车加工流水线等。 JSP问题描述&…

雅特力单片机开发笔记

目录 1.开发资源获取 2.硬件资源 2.1 硬件原理图pcb资源 2.2 数据手册 3.SDK软件资源 3.1 keil开发环境配置 3.2 软件开发包说明 3.3 jlink配置 3.4 jlink编程与仿真 3.5 程序相关例程说明 4. 单片机开发工具 5.雅特力单片机论坛 1.开发资源获取 雅特力单片机所有资…

GD GD32F103RCT6 微控制器

GD32F103RCT6是全新的通用型32位高性能、低功耗微控制器系列产品&#xff0c;采用ARMR CortexR-M3内核&#xff0c;适用于广泛的应用场景。GD32F103RCT6系列产品集成丰富的特性&#xff0c;可简化系统设计&#xff0c;并通过久经验证的技术和卓越创新为客户提供广范、超优性价比…

linux安装docker并设置国内镜像仓库

前置条件 该方案为centos上安装docker&#xff0c;其他版本linux请参照官方文档&#xff1a;https://docs.docker.com/engine/install/centos/该linux系统没有安装过docker&#xff0c;或者已卸载docker #卸载docker yum remove docker \docker-client \docker-client-latest…