golang 64位linux环境下编译出32位程序操作

yizhihongxing

要在64位Linux环境下编译出32位程序,需要使用交叉编译。下面是步骤:

环境准备

  1. 安装gcc和golang的32位开发库:
$ sudo apt install gcc-multilib  
$ sudo apt install libc6-dev-i386  
  1. 下载并安装32位的 Golang(假设你的 GOPATH$HOME/go):
$ cd ~
$ wget https://dl.google.com/go/go1.12.7.linux-386.tar.gz
$ sudo tar -xzf go1.12.7.linux-386.tar.gz -C /usr/local/
$ export PATH=$PATH:/usr/local/go/bin
$ export GOPATH=$HOME/go

编译32位程序

  1. 进入golang项目的目录:
$ cd $GOPATH/src/project
  1. 设置环境变量:
$ export GOARCH=386
$ export GOOS=linux
  1. 如果需要,设置交叉编译所需的链接器环境变量:
$ export CC="gcc -m32"
  1. 编译项目:
$ go build

例子1:编译项目,生成32位可执行文件。
项目路径为 /home/user/project,可执行文件名称为 test32,以下是命令示例:

$ cd /home/user/project
$ export GOARCH=386
$ export GOOS=linux
$ go build -o test32

例子2:在64位Linux环境下编译32位的C程序。
在32位环境下编译C程序底层使用的是32位的库,必须先安装32位的库。首先,安装gcc和32位的库文件:

$ sudo apt-get update
$ sudo apt-get install gcc-multilib  
$ sudo apt-get install libc6-dev-i386  

然后编写32位的C程序:

#include <stdio.h>
int main()
{
    printf("Hello, world!\n");
    return 0;
}

编译C程序:

$ export CC="gcc -m32"
$ gcc -m32 -o myprog myprog.c

可以 add machine 检查生成的二进制文件

$ file myprog
myprog: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=0x4234b7891d0365da7ca37b6b15c9bb1d70a7e7f5, not stripped

这样就可以在64位Linux环境下编译出32位的C程序了。

显示的机器位数示例,如果你要编译生成的文件运行在另一台机器上,建议检查目标机器CPU类型知道32位还是64位,然后采用相对应的命令进行编译。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:golang 64位linux环境下编译出32位程序操作 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 解决启动MongoDB错误:error while loading shared libraries: libstdc++.so.6:cannot open shared object file:

    首先,这个错误通常是由于系统中没有安装或者缺失libstdc++.so.6这个动态链接库文件导致的。解决这个问题的方法如下: 检查系统中是否已经安装了libstdc++.so.6库文件 可以使用下面的命令来查看系统中是否已经安装了这个库文件: ldconfig -p | grep libstdc++.so.6 如果输出中有路径信息,则说明这个库文件已经安装。…

    database 2023年5月22日
    00
  • MySql数据类型教程示例详解

    MySql数据类型教程示例详解 什么是数据类型? 数据类型是指在编程中用于定义变量或常量的类型,每一个数据类型在计算机内存中占用一定的空间,定义不同数据类型的目的是为了方便处理不同的数据。 MySql的数据类型 MySql支持多种数据类型,包括数字、字符、时间等类型,具体分类如下: 数字类型 TINYINT:1字节,范围为-128到127的有符号整数或0到2…

    database 2023年5月22日
    00
  • demo项目开发(Python+flask+mysql+redis只包含后端接口)

    【demo项目开发需求】 用户信息管理,可以注册、登录、添加用户、删除用户 注册:任何用户可以注册,对用户提交的注册信息进行校验,返回对应的信息,其中:   用户名:必填,唯一   密码:必填,只能6-12位,入库是加盐加密   真实名:必填   性别:非必填,只能0(male)或者1(female)   电话:必填,唯一,满足电话要求,数字,且11位 登录…

    MySQL 2023年4月12日
    00
  • MySQL的逻辑架构及工作全流程

    MySQL是一种常用的关系型数据库管理系统。下面是MySQL逻辑架构及工作全流程的完整攻略。 MySQL逻辑架构 MySQL的逻辑架构可以分为以下三个部分: 连接器 连接器负责处理客户端的连接请求,验证用户身份和权限,并管理和维护连接。在收到连接请求后,连接器会尝试和客户端建立连接,验证用户身份和权限。如果验证通过,则连接器会创建一个线程,并为该线程分配一个…

    database 2023年5月19日
    00
  • sql server关键字详解大全(图文)

    SQL Server关键字详解大全 SQL Server 是一款非常流行的关系型数据库管理系统,其中包含大量的关键字,每个关键字都具有不同的作用和用法。本文将为大家详细讲解 SQL Server 中常见的关键字以及它们的用法。 1. SELECT SELECT 是 SQL 中用来查询数据的关键字。它可以从一个或多个表中检索出要显示的数据列,可以通过 WHER…

    database 2023年5月21日
    00
  • ubuntu系统下部署zabbix服务器监控的方法教程

    下面是详细讲解“Ubuntu系统下部署Zabbix服务器监控的方法教程”的完整攻略: 安装并配置Zabbix服务器 安装Zabbix服务器 执行以下命令安装Zabbix服务器: sudo apt install zabbix-server-mysql zabbix-frontend-php 在安装过程中会提示你填写数据库密码和Zabbix服务器的密码,按要求…

    database 2023年5月22日
    00
  • 深入Oracle的left join中on和where的区别详解

    深入Oracle的Left Join中ON和WHERE的区别详解 当我们在使用Left Join连接两张表格时,我们可以在Join语句中使用ON或WHERE子句来对连接进行筛选。本文将详细讲解ON和WHERE两个子句的使用区别并提供示例代码。 ON子句 ON子句是在Join子句后面使用的,它用于指定连接两张表格时的条件。通过ON子句,我们可以在连接表格时确保…

    database 2023年5月21日
    00
  • MySQL数据库大小写敏感的问题

    MySQL数据库大小写敏感的问题是一个常见的问题,下面是针对这个问题的一些攻略。 1. MySQL数据库大小写敏感的原因 MySQL数据库的表名、列名、索引名、触发器名、存储过程等标识符在创建时是否使用了引号会影响它们的大小写和是否敏感。使用引号时,标识符大小写敏感,不使用引号时,标识符大小写不敏感。 如果使用引号来定义标识符,MySQL将严格区分大小写,如…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部