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

您的位置: 首页 > 文章列表 > 编程开发 > Ubuntu上Golang编译动态链接库方法

Ubuntu上Golang编译动态链接库方法

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

扫一扫,手机访问

在Ubuntu上,如果你想用Go语言编译出动态链接库(也就是常见的`.so`文件),整个过程其实比想象中要直白。下面就把完整流程拆开讲清楚,每一步都附上代码,方便对照操作。 ![Ubuntu上Golang编译动态链接库方法](http://img.318050.com/uploads/20260421/177676714169e750a5e743b973247404.webp) 首先,确保你的系统里已经装好了Go。如果还没装,去Go官方网站下载对应Ubuntu版本的安装包,按提示装好就行,这里不再赘述。 接下来,新建一个Go文件,比如就叫`hello.go`,然后写入下面的代码。注意,这个例子虽然简单,但关键部分一个都不少: ```go package main import "C" import ( "fmt" ) //export Hello func Hello() { fmt.Println("Hello from Go!") } func main() {} ``` 这里面有几个要点:`import "C"`是必须的,它启用了cgo机制;`//export Hello`这行注释告诉编译器,`Hello`函数需要被导出到生成的动态库中,少了它函数就露不出去;`main`函数虽然空着,但也不能省略,因为Go要求可执行包必须有`main`函数,编译成动态库时也一样。 接下来,用下面这条命令把Go代码编译成动态链接库: ```bash go build -o libhello.so -buildmode=c-shared hello.go ``` 执行完之后,当前目录下就会多出一个`libhello.so`文件,这就是我们要的动态库。注意`-buildmode=c-shared`这个参数,它正是生成C风格共享库的关键。 库已经造好了,怎么在别的程序里调用它呢?我们再建一个Go文件,比如`main.go`,写入以下代码来演示调用: ```go package main /* #cgo LDFLAGS: -L. -lhello #include typedef void (*hello_func)(); int main() { hello_func hello = (hello_func) dlsym(RTLD_DEFAULT, "Hello"); if (hello == NULL) { return 1; } hello(); return 0; } */ import "C" func main() {} ``` 这里用了`cgo`指令,通过`#cgo LDFLAGS: -L. -lhello`告诉链接器去当前目录找`libhello.so`库,并且链接它。代码内部用`dlsym`动态加载了`Hello`函数并调用,这是典型的C语言动态库调用方式。 最后,编译并运行这个调用程序: ```bash go build -o main main.go LD_LIBRARY_PATH=. ./main ``` 控制台会输出: ``` Hello from Go! ``` 一切正常。现在你已经掌握了在Ubuntu上用Go生成`.so`动态库,并在其他Go程序里调用它的完整方法。实际项目中,你还可以把导出的函数写得复杂些,比如返回字符串或结构体,原理都一样。
本文转载于:https://www.yisu.com/ask/15158724.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注