分享

Go1.5生成动态库

 quasiceo 2017-03-07

Go1.5生成动态库

zmguozi 在 2015-07-04 12:25 发布 8949 次点击

生成C动态库

lib.go 源文件

  1. package main

  2. import "C"

  3. //export Hello
  4. func Hello() string {
  5. return "Hello"
  6. }

  7. func main() {
  8. }

lib.c 源文件文件,目的是生成导出函数和lib.h文件

include “_cgo_export.h”

将这段代码生成c库,进入该源码目录执行:

生成动态库

go build -v -x -buildmode=c-shared -o lib.so

生成静态库:

go build -v -x -buildmode=c-archive -o lib.a

要点:

1.不能将单个的包编译成C库;
2.项目必须包含main包和main入口函数;

生成GO动态库

  1. package lib

  2. //export Hello
  3. func Hello() string {
  4. return "Hello"
  5. }

将这段代码生成GO动态库,进入该源码目录执行:
go install -v -x -buildmode=shared runtime sync/atomic #构建核心基本库
go install -v -x -buildmode=shared -linkshared #构建GO动态库

调用

  1. package main

  2. import (
  3. "fmt"
  4. "lib"
  5. )

  6. func main() {
  7. fmt.Println(lib.Hello())
  8. }

进入该源码目录执行:
go build -v -x -linkshared


zmguozi 于 2015-07-07 22:23 修改
10 回复
zmguozi
#1 zmguozi · 2015-07-04 16:39

此处有一个例子,将go的http包封装成so供c调用。猛戳这里去下载。

解压,进入目录,执行make
搞完执行 LD_LIBRARY_PATH=build/ ./build/gohttp-c

Justin
#2 Justin · 2015-07-04 21:40

学习了

zmguozi
#3 zmguozi · 2015-07-07 22:23

已更新

haohuoyao
#4 haohuoyao · 2015-07-08 07:42

go lib is
comiple
time
load
、not
runtimeload

CrossRun
#5 CrossRun · 2015-07-08 09:00

将go的http包封装成so供c调用。

突然发现GO添加动态库的特性以后,貌似能倒腾的地方变多了

mi_tiger
#6 mi_tiger · 2015-07-08 10:30

golang1.5发布了吗?

haohuoyao
#7 haohuoyao · 2015-07-09 08:35

D:\tmp\go15>go build -v -x -buildmode=shared
-buildmode=shared not supported on windows/386

搞毛啊,不支持windows….

karla
#8 karla · 2015-08-20 13:14

-buildmode=shared not supported on darwin/amd64

Comdex
#9 Comdex · 2015-08-20 14:32

我想知道的事在golang调用golang的动态库时进行编译还需要有动态库的源码?

xinyu391
#10 xinyu391 · 2015-08-20 20:34

go 程序还不能运行时动态调用 go生成的“动态库“吧。

这不所谓的动态库,还不是静态的嘛

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多