无极4注册主管-无极荣耀娱乐-无极登录注册

    
admin

皮堡斯,构建和运用Go软件包作为C库

  6天前     124     0
简介:CGO是Go的官方内置功能,它使创建引用C库的Go包成为可能。不仅如此,它也可以在相反的方向上实现。它使您可以从Go包中创建C库,以便C代码可以引用令人赞叹的Go。将Go程序包构建为C共享库(或共享对象)每个Go main软件包都可以构建为C共享库。...



CGO是Go的官方内置功用,它使创立引证C库的Go包成为可能。不仅如此,它也能够在相反的方向上完成。它使您能够从Go包中创立C库,以便C代码能够引证令人赞赏的Go。


将Go程序包构建为C同享库(又叫瓦房店站长网或同享方针)

每个Go main软件包都女秘能够构建为C同享库。

$ go build -go build -buildmode c-shared -o .so 

履行上述指令会将方针Go main软件包及其一切依靠项构0x800c0005建为单个C同享库,能够将其分发,装置和链接到任何C应用程序,夯先生以及能够引证C同享库的其他言语(C ++,Python,Javasc流氓国家rip112t等) 。

留意:输出C同享库应以规范格局命名lib*古怪君.so。

生成C标头并将Go函数导出为C函数

将Go main程序包构建为C同享库也不会生皮堡斯,构建和运用Go软件包作为C库成C头文件,也不会将任何Go函数揭露为C符号。开发人员有必要明确指出要揭露哪些黑猫警长歌曲Go函数。

要将Go函数导出为C符号:

  • 在Go函数的顶部增加注释//export FuncName。
  • 包括函数的Go文件代码有必要为import "C"。
  • 该功用有必要归于main包。
  • 函数签名既不能具有Go结构,也不能具有Go接口,也不能具有Go数组或可变参数。
package main 
import "C"
import (
"math/rand"
"time"
)免费言情小说
//export cgoCurrentMillis
func cgoCurrentM潘和忠illis() C.long {
return C.long(time.Now().Unix()皮堡斯,构建和运用Go软件包作为C库)
}
//export cgoSeed
func cgoSeed(m C.long) {
rand.Seed(皮堡斯,构建和运用Go软件包作为C库int64(m))
}
//export cgoRandom
func cgoRandom(m C.int) C.int {
return C.int(rand.Intn(int(m)))
}融资融券

在Go main包之上构建将生成一个C我的儿媳头文件.h以及一个C同享库.so。

// Other stuff. 
extern long int cgoCurrentMillis();
extern void cgoSeed(long i樱花庄的宠物女孩nt p0);
exte皮堡斯,构建和运用Go软件包作为C库rn int cgoRandom(int p0);

cgoCurrentMil菩提祖师li,cgoSeed而且cgoRandom在中也显现为C符号.so。现在,每个C应用程序都能够包括头文件播播并运用揭露的C符号。

#i皮堡斯,构建和运用Go软件包作为C库nclude  
#include
int main() {
cgoSeed(cgoCurrentMilli());

printf("523Hello World from C!\n");
pr皮堡斯,构建和运用Go软件包作为C库intf("cgoRazhibobandom() -> %d\n", cgoRandom(256));
return 0;
}

翻译自:https://medium.co张悬m/@phuctm97/build-and-use-go-packag漏电保护器es-as-c-libraries-889eb0c1983皮堡斯,构建和运用Go软件包作为C库8

声明感谢您对我们网站的认可,非常欢迎各位朋友分享本站内容到个人网站或者朋友圈,
转转请注明出处:http://lxcaopi.com/articles/1517.html
点赞 打赏

打赏方式:

支付宝扫一扫

微信扫一扫

扫一扫
QQ客服:111111111
工作日: 周一至周五
工作时间: 9:00-18:00