64位的centos7 下编译32位的c/c++程序

本文详细介绍了在64位CentOS系统上设置32位编译环境的方法,包括安装32位库,通过gcc编译器添加-m32参数,修改makefile,以及验证生成程序类型的步骤。

32位的编译环境设置

  1. 编译32位的c/c++程序,必须需要 C 和 C++ 库(glibc 和 libstdc++)以及 GCC 库(libgcc)的 32 位版本,操作如下:
$ yum install libstdc++-*.i686
$ yum install glibc-*.i686
$ yum install libgcc.i686
  1. 如果用到了第三方的库,还需要安装32位的兼容库,以下两个操作可以解决大多数的32位程序依赖,如果不能解决就只能具体问题具体分析了
yum  install  xulrunner.i686
yum  install  ia32-libs.i686 glibc.i686 vim*

设置生成的程序版本

方法一:使用gcc编译时增加参数

32位版:加上 -m32 参数,生成32位的代码。
64位版:加上 -m64 参数,生成64位的代码。
debug版:加上 -g 参数,生成调试信息。
release版:加上 -static 参数,进行静态链接,使程序不再依赖动态库。加上 -O3 参数,进行最快速度优化。加上-DNDEBUG参数,定义NDEBUG宏,屏蔽断言。

方法二:修改makefile代码

在makefile文件中搜索字段CFLAGS,在CFLAGS字段后加 “-m32”。

CC=gcc
CFLAGS=-g -m32

其实,修改makefile代码和方法一是一个道理.

验证生成的程序是否是32位的

使用“file”命令

file xxx

xxx 表示查看的文件。

<think>首先,用户的问题是基于引用内容,询问在CentOS 7系统上,已经安装了64的Qt 5.9.6之后,如何编译32程序。用户提供了三个引用:引用[1]是关于QT移植到ARM平台,引用[2]是关于CentOS 7安装Qt 5.9,引用[3]是关于CentOS 7源码安装Qt5。但用户的问题焦点是编译32程序,而不是安装或移植。 用户说:“我想在已安装64Qt5.9.6的Centos7系统上编译32程序的方法”。所以,核心是如何使用现有的64Qt安装来编译32的应用程序。 关键点: - 系统是CentOS 7,x86_64架构。 - 已经安装了64的Qt 5.9.6。 - 目标是编译32程序,这意味着需要生成32的可执行文件。 在Linux上,编译32程序通常需要安装32开发库和工具链。由于Qt是一个跨平台框架,编译32Qt应用程序可能需要32的Qt库或交叉编译设置。 从用户提供的引用中: - 引用[2]提到在CentOS 7上安装Qt 5.9.1,但用户有5.9.6,类似。 - 引用[3]是关于源码安装Qt5,但用户已经安装了64版本。 用户的问题不是安装Qt,而是编译32程序。所以,我需要指导如何在现有设置下编译32程序。 步骤可能包括: 1. 安装32开发工具和库。 2. 配置Qt项目以针对32架构。 3. 使用Qt Creator或命令行进行编译。 在Qt中,编译32程序通常需要: - 确保有32的Qt库安装。用户只有64安装,所以可能需要安装32的Qt版本或使用多架构支持。 - 在CentOS上,可以通过安装multilib支持编译32程序CentOS 7支持多架构。用户需要安装32开发包。 具体步骤: 1. 安装32的gcc和g++编译器。 2. 安装32的Qt库依赖。 3. 在Qt项目中设置编译选项。 用户提到“已安装64Qt5.9.6”,所以可能不需要重新安装Qt,但需要确保有32的运行时库。 在Linux上,可以使用`-m32`标志来编译32代码,但这要求有32的库。 对于Qt,Qt安装通常是架构特定的。一个Qt安装是针对特定架构的(3264)。所以,用户可能需要安装一个额外的32Qt版本。 参考引用[2],用户安装了Qt到`/opt/Qt5.9.1/5.9.1/gcc_64/bin`,这是64的。 为了编译32程序,用户可能需要: - 安装32的Qt SDK。 - 或者在同一个系统中安装32Qt库。 在CentOS上,可以使用yum安装multilib包。 标准方法: - 安装32开发工具:`sudo yum install glibc-devel.i686 libstdc++-devel.i686` 等。 - 然后,对于Qt,可能需要指定使用32编译器。 在Qt Creator中,可以添加一个32的工具链。 用户可能使用命令行或Qt Creator。 从引用[2],用户设置了PATH到64Qt的bin,所以类似地,需要为32设置。 但Qt安装是独立的。用户可能需要下载并安装32版本的Qt。 或者,从源码编译32Qt,但用户可能不想这么做。 在回答中,我应该提供实用的步骤。 结构化回答: 1. 解释需要32工具链。 2. 安装必要的32库。 3. 配置Qt项目以使用32编译。 在CentOS 7: - 安装multilib开发包: ``` sudo yum install glibc-devel.i686 libstdc++-devel.i686 ``` - 然后,在Qt Creator中,添加一个使用32gcc的编译器。 - 或者在qmake时指定-m32。 但Qt qmake可能也需要32版本。 用户有64Qt安装,qmake是64的,运行qmake会生成Makefile使用64编译器。 要生成32Makefile,可能需要指定平台。 一个常见的方法是使用一个脚本来设置环境变量。 例如,创建一个32的工具链。 步骤: 1. 安装32依赖: ``` sudo yum install gcc-c++ glibc-devel.i686 libstdc++-devel.i686 ``` 这将安装32版本的gcc和标准库。 2. 然后,在Qt项目中,使用qmake时指定架构。 但qmake本身是64的,它可能默认生成64Makefile。 在qmake中,可以使用`-platform`和`-xplatform`选项,但通常用于交叉编译。 对于本机32编译,可以尝试设置环境变量。 一个方法是: - 创建一个新的构建目录。 - 运行qmake,但指定编译器为32。 例如: ``` qmake -spec linux-g++-32 ``` 但需要`linux-g++-32`规范存在。 在Qt安装中,mkspecs目录下有各种规范。CentOS上,默认是`linux-g++-64`或类似。 可能需要添加一个32的mkspec。 更简单的方法:在Qt Creator中配置。 或者,手动设置。 另一个选项是使用`-m32`标志。 在.pro文件中添加: ``` QMAKE_CFLAGS += -m32 QMAKE_CXXFLAGS += -m32 QMAKE_LFLAGS += -m32 ``` 然后运行qmake和make。 但这要求有32的库,包括Qt库。 问题:如果Qt安装是64的,应用程序链接到64Qt库,编译32时,需要32Qt库。 所以,关键点是:用户需要安装32的Qt库。 否则,链接会失败。 因此,用户可能需要安装一个32版本的Qt。 在同一个系统上,可以安装多个Qt版本,一个64,一个32。 然后,在项目中,选择32的Qt版本来构建。 从引用[2],用户安装了Qt到`/opt/Qt5.9.1/5.9.1/gcc_64`,所以对于32,可以安装到`/opt/Qt5.9.1/5.9.1/gcc`(32)。 Qt官方提供不同架构的二进制包。 用户可以从Qt下载32版本的Qt 5.9.6 for Linux x86。 然后安装它,例如到`/opt/Qt5.9.6/5.9.6/gcc_32`。 然后在Qt Creator中,添加这个Qt版本作为工具链。 或者使用命令行,设置PATH到这个32Qt的bin。 在CentOS上,yum不提供Qt包,用户从二进制安装的。 所以,推荐步骤: 1. 下载32Qt 5.9.6安装包。 2. 安装32Qt到系统。 3. 在Qt Creator中配置使用32Qt进行构建。 4. 或者,在命令行中,使用32qmake。 用户问题:编译32程序,所以可能用户有源代码,想编译32。 回答应覆盖两种方式:命令行和Qt Creator。 先处理依赖。 在安装32Qt之前,确保系统有32库。 从引用[2],用户提到安装mesa-libGL-devel等,但那是为了运行,不是编译。 对于32,可能需要32版本。 简化步骤。 最终回答结构: - 介绍:编译32程序需要32工具链和库。 - 步骤1:安装32开发工具和库。 - 步骤2:安装32Qt版本。 - 步骤3:配置项目以使用32Qt编译。 - 可选:使用命令行编译。 生成相关问题。 引用用户提供的引用:引用[1]是ARM移植,不相关;引用[2]和[3]是安装Qt,用户有64安装。 在回答中,引用可能不直接相关,但可以提到安装部分。 用户说“上述引用仅供参考”,所以不必强制引用。 但系统指令说“回答中引用的段落末尾自然地添加引用标识”,所以如果我从引用中取信息,要加引用。 在回答中,我可以提到引用[2]中的安装路径。 现在,写回答。 </think> ### 在已安装64Qt 5.9.6的CentOS 7系统上编译32程序的方法 在CentOS 7系统上,您已经安装了64Qt 5.9.6(参考引用[2]的安装路径为`/opt/Qt5.9.1/5.9.1/gcc_64`,但您使用的是5.9.6,原理相同)。要编译32程序,关键是需要配置32工具链、安装32Qt库,并正确设置项目构建环境。原因如下: - 64Qt安装默认针对x86_64架构生成64可执行文件。 - 编译32程序(x86架构)需要32版本的Qt库、编译器(如g++)和系统库(如glibc),否则会出现链接错误或运行时问题。 以下是详细步骤,分为两个主要部分:**安装必要的32依赖和Qt库**、**配置和编译32程序**。步骤假设您使用命令行或Qt Creator,并已具备基本的Linux操作知识。 #### 步骤1: 安装32开发工具和系统库 在编译32程序前,必须安装CentOS 732开发工具链和依赖库。这些提供基础的32编译支持: 1. 安装32编译器及核心库: ```bash sudo yum install -y glibc-devel.i686 libstdc++-devel.i686 gcc-c++ # 安装32gcc/g++和标准库 ``` - 这将添加`-m32`编译标志的支持。 2. 安装Qt依赖的32库(如OpenGL等,参考引用[2]中的mesa库安装): ```bash sudo yum install -y mesa-libGL-devel.i686 mesa-libGLU-devel.i686 freeglut-devel.i686 # 32图形库 ``` - 确保网络连接,否则安装可能失败(如引用[2]所述)。 3. 验证32工具链: ```bash g++ -m32 -v # 检查32g++是否可用 ``` - 输出应显示`Target: i686-redhat-linux`或类似,表示支持32编译。 #### 步骤2: 安装32Qt 5.9.6库 您已有的64Qt安装无法直接用于32编译(如引用[3]所述,Qt安装是架构特定的)。您需要额外安装32Qt版本: 1. **下载32Qt 5.9.6安装包**: - 访问Qt官方存档: [https://download.qt.io/archive/qt/5.9/5.9.6/](https://download.qt.io/archive/qt/5.9/5.9.6/) - 下载文件: `qt-opensource-linux-x86-5.9.6.run`(适用于32x86)。 2. **安装32Qt**: ```bash chmod a+x qt-opensource-linux-x86-5.9.6.run # 添加可执行权限 ./qt-opensource-linux-x86-5.9.6.run # 运行安装程序 ``` - 安装时选择路径,例如:`/opt/Qt5.9.6/5.9.6/gcc_32`(区分于64路径)。 3. **配置环境变量**(可选,便于命令行使用): - 创建或编辑配置文件(如`/etc/profile.d/qt5_32.sh`): ```bash echo 'PATH=/opt/Qt5.9.6/5.9.6/gcc_32/bin:$PATH' | sudo tee /etc/profile.d/qt5_32.sh source /etc/profile.d/qt5_32.sh # 立即生效 ``` - 验证:`qmake -v` 应显示Qt 5.9.6且路径为32bin目录。 #### 步骤3: 编译32程序 根据您的开发方式,选择命令行或Qt Creator方法: - **命令行编译**: 1. 进入项目目录: ```bash cd /path/to/your/project ``` 2. 使用32qmake生成Makefile: ```bash qmake -spec linux-g++-32 # 指定32规范 ``` - 如果`linux-g++-32`规范不存在,手动设置: ```bash qmake QMAKE_CFLAGS+="-m32" QMAKE_CXXFLAGS+="-m32" QMAKE_LFLAGS+="-m32" ``` 3. 编译并链接: ```bash make -j$(nproc) # 使用多核编译 ``` 4. 验证可执行文件: ```bash file your_program # 输出应包含 "ELF 32-bit LSB executable" ``` - **使用Qt Creator**: 1. 打开Qt Creator,进入 **Tools** > **Options** > **Kits**。 2. 添加32Qt版本: - 在 **Qt Versions** 标签页,点击 **Add**,浏览到32qmake路径(如`/opt/Qt5.9.6/5.9.6/gcc_32/bin/qmake`)。 3. 创建新Kit: - 在 **Kits** 标签页,点击 **Add**,设置: - **Qt version**: 选择刚添加32Qt。 - **Compiler**: 选择 **GCC (x86 32-bit)**(如未自动检测,手动添加编译器路径,如`/usr/bin/g++`并指定`-m32`)。 - 保存为“32-bit Build”。 4. 构建项目: - 打开项目,在左下角选择新创建的“32-bit Build” Kit,点击 **Build**。 #### 注意事项 - **常见问题**: - 如果链接失败(如缺失32Qt库),确保步骤2中32Qt安装正确,且环境变量指向32bin。 - 如果系统库缺失,用`yum search <package>.i686`查找并安装其他32包。 - **性能**:编译32程序64系统上效率较高,但生成的可执行文件适用于32ARM或x86设备(如引用[1]中的ARM平台)。 - **备选方案**:如果安装32Qt不可行,可考虑从源码编译Qt(如引用[3]),但更复杂且耗时。 通过以上步骤,您可以在现有64Qt环境中无缝编译32应用程序。如有具体错误,请提供日志以便进一步诊断[^1][^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值