首页 > 系统相关 >使用 Golang 编译 Linux 可运行文件

使用 Golang 编译 Linux 可运行文件

时间:2025-01-16 19:21:16浏览次数:1  
标签:可执行文件 Golang 编译 Linux go hello

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. 使用 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 库。

标签:可执行文件,Golang,编译,Linux,go,hello
From: https://www.cnblogs.com/ll55522201/p/18675633

相关文章

  • Linux基础01天:指令起步
    ​​​​​##Linux指令起步st@st-virtual-machine:~$st:当前登录用户名,安装的时候设置的@:没有意义,分隔符st-virtual-machine:主机名~:家目录$:用于区分用户角色的,$表示普通用户,#表示ROOT用户pwd:Linux命令,用来**查看当前所在目录的绝对路径**,Linux绝对路径......
  • Linux基础04天:压缩与解压缩 / vim
    Linux基础:04天笔记内容提要压缩、打包、解压缩Vim编辑器权限说明权限的类型权限的数值普通文件目录/文件夹r:可读4cat.less.more.head.taill等lsw:可写2>(覆盖写入),>>(追加写入),touch,rmmkdir:rmdirrm,mvx:可执行1./文件名(可执行文件)cd,cp,mv(移动)-:无权限0无操作无操作压......
  • Linux基础02天:文件操作
    Linux基础:第02天笔记内容提要文件系统目录操作文件操作文件系统Linux本质上就是一个文件系统,Linux文件系统是做系统组织,存取,保存数据的一种手段。整体采用层级式的倒状目录结构。倒树状结构中的目录/:根目录,Linux中的绝对路径就是从这个开始的/bin:主要存放系统的普......
  • 编译器设计史 | 工作原理 | C 编译器简介
    注:机翻,未校。HistoryofCompilerDesign编译器设计的历史PriteshPawarOct20,2021InthisblogI’llbetryingtoshadowthehistoryofcompilersindetailalongwiththebasicintroductiontocompilersandit’soptimization.在这篇博客中,我将尝试详......
  • Linux:文件与目录管理
    ------------------------------------------------------------一、目录结构在控制台输入ls/查看根目录。Linux有着将一切视为文件的原则,根目录就是所有文件的起始点。 其拥有树状的目录结构,下面开始介绍各个根目录下文件夹的作用。/:根目录/bin:普通用户可执行......
  • Linux 提权指南
    知屋漏者在宇下,知政失者在草野,知经误者在诸子。导航壹-密码搜寻贰-Sudo命令叁-SUID/SGID特权肆-计划任务伍-文件/目录陆-Linux内核柒-服务程序MySQLUDFNFS共享Docker容器LXD容器捌-自动化工具壹-密码搜寻在/var/www/*目录下......
  • 解决cmake编译时*ui,*h存放在不同文件夹下时*.ui无法生成ui_*.h问题
    使用的Qt版本为6.8.1,cmake版本为3.31.0-rc1。遇到问题原因原本的目录结构比较乱,代码文件一多就很不好找,在对文件进行分类管理的过程中发现*ui文件无法生成ui_*.h有问题部分的cmake本来想使用qt_wrap_ui和set(CMAKE_AUTOUICON)让他自动生成ui_*.h的,但是失败了cmake_minimum_......
  • IAR编译工程报错:CreateProcess failed:The system cannot find the file specified
    IAR安装完成后,编译STM32的工程时报如下错误信息:CreateProcessfailed:Thesystemcannotfindthefilespecified全网检索各种答案都有,尝试重新安装、版本升级等都没能解决。因为之前有过安装8.32版本,卸载后又进行安装的9.2版本,抱着试探的心理,打开注册表将和IAR相关......
  • linux设置ssh免密登录
    在Linux系统中设置SSH免密登录是一个常见的需求,它能够提高自动化脚本和日常工作的便捷性。下面我将根据您提供的提示,分步骤详细解释如何设置SSH免密登录:1.在客户端生成SSH密钥对首先,在客户端机器上生成SSH密钥对。这通常包括一个私钥(id_rsa)和一个公钥(id_rsa.pub)。私钥应妥善保......
  • Linux---(2)---用户和组(用户)
    用户前言用户一、理解Linux多用户、多任务的特性二、用户分类三、用户配置文件用户账户信息文件用户账户密码文件四、添加用户五、给用户添加密码六、删除用户七、修改用户小实验:用VIM创建用户1.创建用户2.切换用户3.创建家目录4.查看用户5.创建组6.切换用户结语......