使用 Golang 编译 Linux 可运行文件

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 main

import "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. 使用 scprsync 将可执行文件传输到目标 Linux 服务器:

    scp hello user@linux_server:/path/to/directory

  2. 在目标服务器上运行可执行文件:

    ssh user@linux_server
    cd /path/to/directory
    chmod +x hello
    ./hello

五、常见问题及解决方案

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

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

5.2 交叉编译后无法运行

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

5.3 运行时报错缺少依赖库

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

相关推荐
小麦嵌入式9 分钟前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
刘若水10 分钟前
Linux: 进程信号初识
linux·运维·服务器
The Future is mine11 分钟前
Python计算经纬度两点之间距离
开发语言·python
Enti7c12 分钟前
HTML5和CSS3的一些特性
开发语言·css3
爱吃巧克力的程序媛19 分钟前
在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application
开发语言·qt
weixin_4209476434 分钟前
windows golang,consul,grpc学习
windows·golang·consul
独好紫罗兰1 小时前
洛谷题单3-P5719 【深基4.例3】分类平均-python-流程图重构
开发语言·python·算法
Json20113151 小时前
Gin、Echo 和 Beego三个 Go 语言 Web 框架的核心区别及各自的优缺点分析,结合其设计目标、功能特性与适用场景
前端·golang·gin·beego
篝火悟者1 小时前
自学-C语言-基础-数组、函数、指针、结构体和共同体、文件
c语言·开发语言
genispan2 小时前
QT/C++ 多线程并发下载实践
开发语言·c++·qt