使用 Golang 编译 Linux 可运行文件

devtools/2025/1/19 3:15:21/

Golang(或 Go)是一种开源编程语言,因其简单、高效、并发编程支持而备受欢迎。本文将详细介绍如何使用 Golang 编译生成可以在 Linux 上运行的可执行文件。

一、安装 Golang

1.1 下载 Golang

从 Golang 官方网站下载适合你操作系统的安装包:Golang 下载页面

1.2 安装 Golang

在 Ubuntu 上安装:
sudo apt update
sudo apt install -y golang
在 CentOS 上安装:
sudo yum update
sudo yum install -y golang
验证安装:
go version
​

输出类似于:

go version go1.16.3 linux/amd64
​

二、编写 Golang 程序

2.1 创建工作目录

mkdir -p ~/go/src/hello
cd ~/go/src/hello
​

2.2 编写示例程序

创建 main.go 文件并添加以下内容:

package mainimport "fmt"func main() {fmt.Println("Hello, World!")
}
​

三、编译 Golang 程序

3.1 本地编译

如果你在 Linux 环境下开发并编译,可以直接使用 go build 命令:

go build -o hello main.go
​

这将在当前目录生成一个名为 hello 的可执行文件。

3.2 交叉编译

如果你在非 Linux 环境(如 Windows 或 macOS)下开发,需要编译生成 Linux 可执行文件,可以使用交叉编译功能。

GOOS=linux GOARCH=amd64 go build -o hello main.go
​

其中:

  • GOOS=linux:目标操作系统为 Linux
  • GOARCH=amd64:目标架构为 64 位

3.3 编译选项

  • -o <filename>:指定输出文件的名称。
  • -v:输出详细的编译信息。
  • -a:强制重新编译所有包。
  • -ldflags:设置编译时的链接器参数。

示例:

go build -o hello -v -ldflags "-s -w" main.go
​

参数解释:

  • -s:去掉符号表信息。
  • -w:去掉 DWARF 调试信息。

四、运行编译后的可执行文件

4.1 在本地运行

./hello
​

输出:

Hello, World!
​

4.2 在目标 Linux 服务器上运行

  1. 使用 scp 或 rsync 将可执行文件传输到目标 Linux 服务器:
scp hello user@linux_server:/path/to/directory
​
  1. 在目标服务器上运行可执行文件:
ssh user@linux_server
cd /path/to/directory
chmod +x hello
./hello
​

五、常见问题及解决方案

5.1 编译过程中出现权限问题

确保你有权限在目标目录中创建和修改文件。使用 sudo 或切换到具有适当权限的用户。

5.2 交叉编译后无法运行

确保交叉编译的目标架构和操作系统设置正确。使用 GOOS 和 GOARCH 变量指定正确的目标平台。

5.3 运行时报错缺少依赖库

Golang 编译的可执行文件通常是静态链接的,不依赖外部库。如果出现缺少依赖库的错误,检查是否使用了需要动态链接的 C 库。


http://www.ppmy.cn/devtools/151729.html

相关文章

【STM32-学习笔记-7-】USART串口通信

文章目录 USART串口通信Ⅰ、硬件电路Ⅱ、常见的电平标准Ⅲ、串口参数及时序Ⅳ、STM32的USART简介数据帧起始位侦测数据采样波特率发生器 Ⅴ、USART函数介绍Ⅵ、USART_InitTypeDef结构体参数1、USART_BaudRate2、USART_WordLength3、USART_StopBits4、USART_Parity5、USART_Mode…

多态(4)

大家好&#xff0c;今天我们来讲讲向下转型这个知识点&#xff0c;这个知识点并没有向上转型用得那么频繁&#xff0c;但是也需要了解一下。 2.4.2向下转型 当一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的属性和方法。但有时候可能需要调用子类的属性和方…

PyTorch 中的 Dropout 解析

文章目录 一、Dropout 的核心作用数值示例&#xff1a;置零与缩放**训练阶段****推理阶段** 二、Dropout 的最佳使用位置与具体实例解析1. 放在全连接层后2. 卷积层后的使用考量3. BatchNorm 层与 Dropout 的关系4. Transformer 中的 Dropout 应用 三、如何确定 Dropout 的位置…

MinerU:高效智能PDF文档解析工具完全指南

引言 MinerU是一款开源的智能文档解析工具&#xff0c;专注于将PDF等文档高效转换为Markdown和JSON等结构化格式。在当前大语言模型(LLM)蓬勃发展的时代&#xff0c;高质量的结构化数据对于训练和微调LLM至关重要。MinerU通过其强大的智能文档解析能力&#xff0c;不仅可以为L…

Visual Studio环境搭建Qgis二次开发环境

QGIS&#xff08;Quantum GIS&#xff09;是一款开源的地理信息系统软件&#xff0c;支持二次开发以满足特定的地理信息处理需求。二次开发通常涉及到使用QGIS提供的API和SDK来创建自定义插件或独立应用程序。以下是关于如何搭建QGIS二次开发环境的一些关键步骤和注意事项。 1…

sqlite3.OperationalError: database is locked python-BaseException错误解决

报错有2种&#xff1a; sqlite3.OperationalError: attempt to write a readonly databasesqlite3.OperationalError: database is locked python-BaseException 原因及解决方案&#xff1a; 1、被占用 由于SQLite只支持单线程。SQLite数据库在同一时间只能由一个连接执行写…

【PCL】Segmentation 模块—— 欧几里得聚类提取(Euclidean Cluster Extraction)

1、简介 PCL 的 Euclidean Cluster Extraction&#xff08;欧几里得聚类提取&#xff09; 是一种基于欧几里得距离的点云聚类算法。它的目标是将点云数据分割成多个独立的簇&#xff08;clusters&#xff09;&#xff0c;每个簇代表一个独立的物体或结构。该算法通过计算点与点…

25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数 GPIO_Ini&#xff1a;初始化GPIO引脚的模式&#xff0c;速度和引脚号 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0 GPIO输出控制函数 GPIO_SetBits&#xff1a;将指定的GPIO引脚设置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIO…