在 CentOS 上使用 Go 语言打包动态链接库(.so 文件)需要一些特定的步骤和配置。以下是一个基本的指南,帮助你在 CentOS 系统上创建一个动态链接库。
首先,确保你已经在 CentOS 上安装了 Go。如果还没有安装,可以通过以下命令安装:
sudo yum install golang
确保 Go 的环境变量已经设置好。通常,安装后 Go 的二进制文件会在 /usr/local/go/bin,你需要把这个路径添加到你的 PATH 环境变量中。可以在 ~/.bash_profile 或 ~/.bashrc 文件中添加如下行:
export PATH=$PATH:/usr/local/go/bin
然后运行 source ~/.bash_profile 或 source ~/.bashrc 使改动生效。
创建一个新的 Go 文件,例如 hello.go,并编写一个简单的动态库:
// hello.go
package main
import "C"
//export Hello
func Hello() {
// 注意:不能直接使用 fmt.Println,因为它不是 C 语言的函数
// 可以使用 C 库中的函数,或者使用其他方式输出
// 例如直接使用 C.CString 和 C.free 来处理字符串
}
func main() {}
使用 go build 命令来编译动态链接库。需要使用 -buildmode=c-shared 选项:
go build -o libhello.so -buildmode=c-shared hello.go
这将在当前目录生成两个文件:libhello.so(动态链接库)和 libhello.h(C 语言头文件,包含如何调用 Go 函数的声明)。
现在你可以在其他 C 或 C++ 程序中使用这个动态链接库。首先确保 LD_LIBRARY_PATH 环境变量包含动态库所在的路径,然后编写一个简单的 C 程序来调用它:
// test.c
#include <stdio.h>
#include "libhello.h"
int main() {
Hello();
return 0;
}
编译这个 C 程序时,需要链接到 libhello.so:
gcc -o test test.c -L. -lhello
运行程序前,设置 LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=.
./test
如果一切正常,你应该能看到来自 Go 函数的输出。
//export 注释时要确保导出的函数名是 C 语言友好的。LD_LIBRARY_PATH。通过这些步骤,你应该能够在 CentOS 上成功打包和使用 Go 语言的动态链接库。