商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何在CentOS上使用CGO编译Golang

如何在CentOS上使用CGO编译Golang

  发布于2026-07-15 阅读(0)

扫一扫,手机访问

在CentOS上折腾CGO编译Golang程序,其实没有想象中那么复杂。核心就几步:装好Go、配好CGO环境变量、写好带C代码的Go源文件,然后一把编译。下面咱们拆开细说。

如何在CentOS上使用CGO编译Golang

1. 安装Go语言环境

先搞定Go本身。CentOS上装Go有两种常见姿势:要么用包管理器一把梭,要么去官网下载二进制手动部署。

用yum安装(最简单,但版本可能不是最新的):

sudo yum install golang

手动下载安装(推荐,版本可控):

  1. 去Go官网下载对应Linux的tar.gz包。
  2. 解压到/usr/local目录:
sudo tar -C /usr/local -xzf go.linux-amd64.tar.gz
  1. 配置环境变量。编辑~/.bashrc~/.bash_profile,追加一行:
export PATH=$PATH:/usr/local/go/bin

保存后记得source ~/.bashrc使其生效。

2. 配置CGO环境变量

CGO说白了就是Go调用C代码的桥梁。要让这座桥通畅,得告诉Go几个关键信息:C编译器是谁、头文件在哪、链接哪些库。常用的环境变量包括:

  • CGO_ENABLED:设为1开启CGO(默认就是1,但显式设置更安心)。
  • CC:C编译器路径,比如/usr/bin/gcc
  • CXX:C++编译器路径。
  • CGO_CFLAGS:给C编译器的额外参数,比如指定头文件路径-I/path/to/include
  • CGO_CPPFLAGS:给C++预处理器的参数。
  • CGO_LDFLAGS:链接阶段的参数,比如指定库路径-L/path/to/lib和链接的库名-lmylib

一个典型的配置示例:

export CGO_ENABLED=1
export CC=/usr/bin/gcc
export CXX=/usr/bin/g++
export CGO_CFLAGS="-I/path/to/include"
export CGO_CPPFLAGS="-I/path/to/include"
export CGO_LDFLAGS="-L/path/to/lib -lmylib"

这些变量可以在编译前一次性export,也可以写进shell配置文件里省事。

3. 编写Golang程序

现在写一个带C代码的Go程序作为例子。新建main.go

package main

/*
#include 
void hello() {
    printf("Hello from C!\n");
}
*/
import "C"

func main() {
    C.hello()
}

注意import "C"前面紧跟着的注释块里就是C代码,这算是CGO的固定语法。

4. 编译Golang程序

编译命令和普通Go程序一模一样:

go build -o myprogram main.go

如果环境变量配对了,CGO会自动编译C部分并链接进去。此时如果遇到错误,多半是C编译器没装或者头文件/库路径不对,回过头检查环境变量设置就好。

5. 运行编译后的程序

编译成功后会生成可执行文件myprogram,直接运行:

./myprogram

终端输出:

Hello from C!

搞定。从输出可以看到,C函数hello()确实被调用了,CGO整个链路跑通了。

总结

在CentOS上使用CGO编译Golang程序,本质就是“装Go → 配CGO环境变量 → 写Go+混合C代码 → 编译运行”这几步。环境变量是容易踩坑的地方,尤其是指定头文件和库路径时,路径要写对、权限要够。实际项目里C代码可能更复杂,但原理都是一样的——只要把C编译器、头文件、库文件这些信息完整告诉Go,剩下的交给go build就好。

本文转载于:https://www.yisu.com/ask/42984174.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注