0

0

使用 Go 创建共享库 (.so)

霞舞

霞舞

发布时间:2025-07-09 18:34:21

|

436人浏览过

|

来源于php中文网

原创

使用 go 创建共享库 (.so)

本文介绍了如何使用 Go 语言创建共享库(.so 文件)。通过 -linkshared 编译选项,可以将 Go 代码编译成动态链接库,从而减小最终可执行文件的大小,并实现代码的模块化和重用。本文将详细介绍编译共享库的步骤,并提供示例代码。

Go 语言从某个版本开始支持创建共享库(Shared Library),这使得 Go 程序能够以动态链接的方式运行,而不是像以往那样静态链接所有依赖。动态链接可以显著减小可执行文件的大小,并允许在运行时更新库文件,而无需重新编译整个程序。

以下是使用 Go 创建共享库的步骤:

1. 编译标准库为共享库

首先,需要将 Go 的标准库编译为共享库。这是因为后续编译用户自定义的包时,会依赖于标准库。使用以下命令:

go install -buildmode=shared -linkshared  std

这个命令会将 Go 标准库编译成共享库,并安装到 $GOROOT/pkg/linux_amd64_dynlink (或其他平台特定的目录) 目录下。

2. 编译用户自定义的包为共享库

接下来,可以将用户自定义的 Go 包编译为共享库。假设你有一个名为 userownpackage 的包,可以使用以下命令:

go install -buildmode=shared -linkshared userownpackage

这个命令会将 userownpackage 编译成共享库,并安装到 $GOPATH/pkg/linux_amd64_dynlink (或其他平台特定的目录) 目录下。 确保 $GOPATH 正确设置,指向你的 Go 工作区。

3. 编译主程序并链接共享库

最后,编译你的主程序,并链接之前生成的共享库。使用以下命令:

外卖吧1.0
外卖吧1.0

一、本站采用PHP+mysql,核心程序使用了kingcms PHP版,重新设计了模板界面,增加了一些操作功能,方便外卖同行可以很好的展示宣传自己的外卖产品。本套源码的模板可以随意共享传播,程序版权仍归Kingcms所有。 二、网站部署操作: 第一步:将“upload”文件夹的所有文件上传到网站的根目录下。 第二步:在数据库管理后台创建好数据库并将源码中的“mysql”文件夹里的文件导入到数据库中

下载
go build -linkshared yourprogram

yourprogram 是你的主程序文件名。这个命令会生成一个可执行文件,它会动态链接到之前编译的共享库。

示例

假设我们有一个简单的 hello.go 文件:

package main

import "fmt"

func main() {
    fmt.Println("Hello, shared library!")
}

按照上述步骤,首先编译标准库:

go install -buildmode=shared -linkshared  std

然后编译 hello.go:

go build -linkshared hello.go

执行生成的可执行文件:

./hello

会输出:

Hello, shared library!

注意事项

  • 环境变量: 确保 GOROOT 和 GOPATH 环境变量已正确设置。
  • 编译模式: -buildmode=shared 选项指定了编译模式为共享库。
  • 链接选项: -linkshared 选项指示编译器使用动态链接。
  • 平台依赖: 共享库是平台相关的,因此需要在目标平台上编译。
  • 体积对比: 使用动态链接可以显著减小可执行文件的大小。例如,静态链接的 "hello.go" 可能有 2.3MB,而动态链接的版本可能只有 12KB。
  • 部署: 部署时,需要确保共享库文件(.so 文件)与可执行文件在同一目录下,或者在系统的库搜索路径中。

总结

通过使用 -linkshared 编译选项,Go 语言可以创建共享库,从而减小可执行文件的大小,并实现代码的模块化和重用。这种方式对于大型项目和需要频繁更新的库非常有用。 遵循上述步骤,可以轻松地将 Go 代码编译成共享库,并将其集成到你的应用程序中。

相关专题

更多
MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

0

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

PHP 表单处理与文件上传安全实战
PHP 表单处理与文件上传安全实战

本专题聚焦 PHP 在表单处理与文件上传场景中的实战与安全问题,系统讲解表单数据获取与校验、XSS 与 CSRF 防护、文件类型与大小限制、上传目录安全配置、恶意文件识别以及常见安全漏洞的防范策略。通过贴近真实业务的案例,帮助学习者掌握 安全、规范地处理用户输入与文件上传的完整开发流程。

7

2026.01.13

PPT交互图表教程大全
PPT交互图表教程大全

本专题整合了PPT交互图表相关教程汇总,阅读专题下面的文章了解更多详细内容。

62

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7万人学习

Git 教程
Git 教程

共21课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号