Go的共享库?
回答
这是可能的,现在使用-linkshared标志
你需要做的就是先运行此命令:(!上面的代码,使所有通用的软件包共享)
go install -buildmode=shared -linkshared std
然后
go install -buildmode=shared -linkshared userownpackage
最后在编译你的代码时你需要运行:
go build -linkshared yourprogram
上面这些现在是什么,而不是静态链接所有东西只动态链接它们,你会最终得到更小的编译文件。只是给你一个想法,我的静态链接“hello.go”文件是2.3MB,而使用动态链接的相同代码只有12KB!
显然,它现在是可能的,但只有在非常精确的情况下。更确切地说,如果您正在为Android平台编写代码。
GitHub上的“goandroid”项目提供了一组补丁程序,允许Go为Android NDK特定使用构建一个共享库。见https://github.com/eliasnaur/goandroid
截至现在(2013年7月),它是Go Tools的扩展,并未嵌入到Google发布的Go Tools中。 – Nate 2013-07-13 04:02:35
@Nate你能链接到扩展名吗? (独立的)扩展只能在android上使用,还是可以在桌面上使用? – 2015-07-08 19:57:16
@mihaistancu我想它不会太难交叉编译去Android,看看[这里](https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-android )。考虑到golang 1.5支持iOS,可以很快获得官方支持。 – Nate 2015-07-09 21:37:30
Go Execution Modes介绍大厦转到包作为共享库:
“在这种模式下围棋包,或一组包,也可以作为共享库导入一个或Go程序。更多的Go包可能会与这个共享库链接,共享库可能会在Go程序链接到运行时间之间更改;程序启动时可用的共享库将是使用...
在Go 1.5发行版中,这仅针对linux-amd64目标实现。使用gccgo它可以针对任何支持的目标实现。“
我回到这个问题来写更新了。 +1 – 2015-08-27 10:19:56
现在可能!我使用Go构建了一个.so文件,然后很容易地导入python!以下是我喜欢的文章:http://www.darkcoding.net/software/building-shared-libraries-in-go-part-1/
- 1. 与GO共享.Net库
- 2. 共享库中的Block Go例程
- 3. 将共享库链接到共享库
- 4. AppEngine-Go模块必须共享相同的代码库
- 5. 在Go主机之间共享变量
- 6. 如何在Go中调用Linux共享库函数?
- 7. 共享库App.Config
- 8. Websphere共享库
- 9. 共享库
- 10. TFS共享库
- 11. 共享库
- 12. 共享库websphere
- 13. Linux共享库
- 14. 共享库 - .so
- 15. cmake共享库
- 16. linux共享c库不共享
- 17. 共享库文本段不可共享
- 18. 不与共享库共享所有类
- 19. 共享库中的pstack(c/C++)。损坏的共享库
- 20. 共享公共弹簧库
- 21. 将共享库共享到共享内存
- 22. 使用共享库的Linux共享库未定义符号
- 23. 加载使用其他共享库的共享库
- 24. 链接共享库与Linux中的另一个共享库
- 25. 使用与其他共享库链接的共享库
- 26. 链接一个共享库静态到我的共享库
- 27. 通过共享库
- 28. NLog,Elmah +共享库
- 29. 共享库安装
- 30. 共享数据库
正确的答案。 – 0x90 2016-02-20 05:32:11
这就是我一直在寻找的东西。但是在我的mac上给出了'-buildmode = shared不支持darwin/amd64'。 – lvle 2017-05-06 16:40:36