`
liuhello
  • 浏览: 69501 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

go和c联合编程

阅读更多

最近在学习go。 看了一段时间后,发现其中有个cgo的命令,使得go语言程序可以调用c语言的函数。这个是很要用处的,因为现在的很多的大型程序都是用c写的,那么如果一下子转用go去重写无疑会加大工程量和成本。 下面就用一个简单的例子来演示怎么在go语言中调用c的函数:

//hello.go
package hello


// int Add(int a,int b) {
//     return a + b;
// }
import "C"
import "fmt"

func AddPrint(a int ,b int) {
    fmt.Println(C.Add(C.int(a),C.int(b)))
}
 

要注意的是这个import "C"前面注释的代码就是c代码,当然也可以把它些在hello.c hello.h文件里面,并且把注释替换成 // #include "hello.h" 就可以拉,这里只是为了简单。 下面就是主程序的入口拉。 

//main.go
package main

import "hello"

func main(){
    var a = 13
    var b = 26
    hello.AddPrint(a,b)
}
 

 

关键在编译。

$8g -o _go_.8 hello.cgo1.go _cgo_gotypes.go
$8c -FVw -I"$GOROOT/src/pkg/runtime" _cgo_defun.c  
$gopack grc _obj/hello.a _go_.8 _cgo_defun.8 
$cp _obj/hello.a "$GOROOT/pkg/linux_386/hello.a" 
$gcc -m32 -fPIC -O2 -o hello.cgo2.o -c hello.cgo2.c 
$gcc -m32 -o _cgo_.so hello.cgo2.o -shared -lpthread -lm 
$cp _cgo_.so "$GOROOT/pkg/linux_386/hello.so" 
$8g main.go $8l -o main main.8 $rm hello.cgo2.c 
$./main 
39 
 

ok, 这里是通过动态链接库的形式链接c些的函数的 如果把hello.so删除点发现就无法运行了。

发现javaeye博客对chrome支持力度不够阿。
0
0
分享到:
评论

相关推荐

    走进GoC的编程世界.pptx

    GoC是Go语言和C语言的混合编程方式,通过GoC,程序员可以使用Go语言的并发编程能力和C语言的性能优势,实现高效的软件开发生态。GoC的编程模型非常简单和高效,它通过Go语言和C语言的接口来实现混合编程。 GoC的...

    嵌入式实验(汇编和C语言混合编程实验).doc

    嵌入式实验中,汇编和C语言混合编程实验是非常重要的一部分,本实验的主要目的是掌握C程序中内嵌指令的使用方法,并理解汇编程序调用C程序函数和变量的方法。 实验的环境是PC机,使用ADS1.2软件,实验的内容包括...

    Go语言编程_许式伟_完整版1

    在编程哲学上,Go语言没有完全采纳C++的面向对象模型,而是选择了面向过程和轻量级面向对象的混合方式。它支持结构体和方法,但没有类和继承,这种设计使得代码更加清晰,减少了过度设计的可能性。Go语言还强调代码...

    go和c相互调用,Golang与DLL交互

    通过这样的方式,开发者可以在Golang项目中充分利用已有的C库资源,同时享受Go语言带来的并发优势和现代化的编程特性。这种跨语言交互能力对于软件开发的灵活性和可扩展性有着显著提升。然而,需要注意的是,`cgo`的...

    Go-PHP绑定至Go编程语言(Golang)

    Go语言以其高效、并发支持和简洁的语法在系统编程和微服务领域受到广泛关注,而PHP则在Web开发中拥有广泛的应用。通过将两者结合,开发者可以利用Go的性能优势处理后端任务,同时保持PHP在前端Web交互的便利性。 ...

    VC6.0和Matlab7.0混合编程(com)

    ### VC6.0与Matlab混合...这种混合编程方式不仅充分利用了Matlab强大的数值计算能力,还借助VC6.0的高效性能实现了高性能的应用开发。对于需要结合Matlab算法和C++编程优势的应用场景来说,这是一种非常实用的方法。

    Go 编程语言+简介+指导原则+语音特性+存在的问题

    Go语言支持与C语言混合编程的特性,即通过Cgo来实现。它允许Go代码直接调用C语言的库函数,并自动进行参数和类型的转换。这使得Go语言能够方便地调用现有的C语言库,并且容易与C语言进行交互。Go语言的闭包(closure...

    编程开发视频资源

    Java视频和资料 前端视频和资料 bootstrap视频和资料 ...go语言视频和资料: PHP全套 移动端混合APP视频和资料 企业级网站前端制作视频和源码 企业级网站后台制作视频和源码 项目篇资料链接 等等。

    Go语言中嵌入C语言的方法

    在Go语言中嵌入C语言,主要是通过Go官方提供的`cgo`工具来实现的。`cgo`允许开发者在Go代码中直接引用C语言编写的库和函数,从而利用C语言的性能优势或者调用已有的C库。下面将详细介绍`cgo`的使用方法及其相关知识...

    经典51C语言编程教程

    4. **汇编语言与C语言混合编程**:了解何时及如何在C语言程序中使用汇编语言段,以实现更高效或特定功能的代码。 5. **单片机开发环境与工具**:熟悉使用IDE(集成开发环境)、编译器、模拟器和调试工具进行项目...

    无缝融合:aardio与VBScript和JavaScript的混合编程艺术

    aardio是一种动态编程语言,同时也是一种混合语言,它能够直接调用C语言、C++等静态语言的API接口函数,而无需像VB那样需要事先声明API。它支持多种API调用约定,如stdcall、cdecl、thiscall、fastcall以及regparm(n...

    Go语言最佳入门手册

    Go语言可以通过Cgo特性与C语言进行混合编程。 **3.9.2 与C++进行交互** 虽然Go语言直接支持C语言,但与C++的交互相对较少。 #### 四、基本结构和基本数据类型 **4.1 文件名、关键字与标识符** Go语言规定了...

    混合编程实现自动化服务器的在线监测.rar

    在IT领域,混合编程是指将不同的编程语言和技术融合在一起,以实现更复杂的功能或优化系统性能。本资源“混合编程实现自动化服务器的在线监测.rar”着重探讨如何利用这种技术来构建一个实时监控服务器状态的自动化...

    分布式缓存 原理 架构及Go语言实现-高清-完整目录

    6. Go语言调用C++库函数,这是讨论Go与C++混合编程的一个实例,Go的CGO工具允许Go调用C或C++代码,这为Go提供了一种与其他语言集成的能力。 通过上述内容,我们能够了解到分布式缓存系统设计与实现的基本方法,以及...

    深入cgo编程

    CGO允许Go与C/C++语言混合编程,这让Go语言能够利用C/C++库的丰富性和高效性,尤其是在处理系统级编程、高性能计算和硬件加速等方面。 在Go中访问C++对象,首先需要了解C++对象和方法在Go中的表示和调用方式。Go...

    虚拟宇宙3D引擎_Go_C_下载.zip

    在“虚拟宇宙3D引擎_Go_C_下载.zip”这个压缩包中,我们可以推断出它是用Go语言和C语言开发的一个3D引擎项目。Go语言以其简洁的语法、高效的性能和内置的并发支持闻名,而C语言则因为其底层控制能力和广泛的应用而...

    golang培训.docx

    - **C/C++ 混合编程**:Go 语言允许嵌入 C 和汇编代码,这使得它能够调用 C 库,增强了其与其他系统的互操作性。 2. **Go 语言的应用领域** Go 语言广泛应用于数据处理、网络应用、服务器编程、Linux 应用、...

    Parallelism in Modern C++(现代C++并行编程)

    该系统是几种创新概念的混合体,包括全局系统范围的地址空间(AGAS-Active Global Address Space),细粒度并行化和轻量级同步机制,隐式的工作队列和基于消息驱动的计算,以及本地和远程执行的全语义等价性。...

Global site tag (gtag.js) - Google Analytics