CGO顾名思义,是go语言用来调用c函数的工具。如果要使用CGO,首先要先确认一下是否安装GCC,因为go调用C之前需要将C语言代码编译。

本篇博客打算实现一个hello world例子来作为入门的演示。

首先在main包下新建一个hello文件夹。里面有两个文件hello.chello.h

其中hello.h代码如下:

// main/hello/hello.h
void SayHello(const char* s);

hello.c代码如下:

// main/hello/hello.c
#include <stdio.h>void SayHello(const char* s) {puts(s);
}

将c语言代码编译并生成静态链接库:

gcc -c -o hello.o hello.c
ar rcs libhello.a hello.o

然后编写go语言的main函数代码:

// main/main.go
package main//#cgo CFLAGS: -I./hello
//#cgo LDFLAGS: -L${SRCDIR}/hello -lhello
//
//#include "hello.h"
import "C"func main() {C.SayHello(C.CString("Hello, World\n"))
}

注意如下的注释必须要添加进去:

//#cgo CFLAGS: -I./hello
//#cgo LDFLAGS: -L${SRCDIR}/hello -lhello
//
//#include "hello.h"

import "C"语句前的注释中可以通过#cgo语句设置编译阶段和链接阶段的相关参数。编译阶段的参数主要用于定义相关宏和指定头文件检索路径。链接阶段的参数主要是指定库文件检索路径和要链接的库文件。

上面的代码中,CFLAGS部分,-I定义了头文件包含的检索目录。LDFLAGS部分,-L指定了链接时库文件检索目录,-l指定了链接时需要链接hello库。这里面-lhello就是指静态链接库libhello.a。

go语言代码在vscode中可能会报错,但是可以运行。在终端运行如下命令:

go run main.go

就可以得到结果。

ubuntu下vscode编写cgo程序相关推荐

  1. Ubuntu下VSCode调试C++程序以及opencv库和Qt5库

    1.自述 自己用VSCode已经三年多了,大多数是写python程序,偶尔也写C++程序,但也不复杂,也不牵扯其他第三方库,就算牵扯第三方库,也大多是先写好CMakeLists文件,然后用标准的cma ...

  2. ubuntu下VSCode的配置

    字体配置 在设置中搜索'font',在'Editor: Font family'中修改, 如下是Ubuntu下VSCode默认字体设置 'Droid Sans Mono', 'monospace', ...

  3. qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...

    本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...

  4. Ubuntu下VScode配置ssh免密远程登录

    一 实现步骤 1.在本机与远程服务器上, 输入ssh-keygen -t rsa,然后连续回车直到结束 2.在本机上执行命令 ssh-copy-id 命令 (1).命令介绍 ssh-copy-id命令 ...

  5. Ubuntu下bpf纯c程序的编写与运行

    1. 前言 搭建bpf运行环境真的是很费时间,踩过的坑也不少,今天也是因为虚拟机扩容崩了,重新安装了最新的ubuntu,bpf运行环境得以搭建完成,也算是破而后立.现在将bpf运行环境搭建和bpf纯c ...

  6. python 程序打包 vscode_使用VScode编写python程序并打包成.exe文件

    听说Visual Studio Code(VS Code)的诸多好处,了解了一下果真很喜欢,我喜欢它的缘由主要有3个,一是VS Code开源且跨平台,二是由于其界面很是酷,三是能够知足个人大所属代码需 ...

  7. Ubuntu下VSCode的安装与卸载【闲聊】

    安装VSCode 编辑器与编译器 在Ubuntu下我们善用于gcc编译器,vim编辑器,但是在编写一些大型的代码时,我们要用到Source insight ,因为这个软件不是免费的,在一些公司没有买这 ...

  8. Ubuntu下vscode使用

    Ubuntu16.04下配置VScode的C/C++开发环境 ubuntu下使用VScode打开本地使用makefile编译的工程(包括命令行参数的配置) 1.安装 直接在Ubuntu打开软件中心进行 ...

  9. ubuntu下创建c语言程序之hello world

    将要学习c语言了,先记录一下在ubuntu下,使用vim创建一个最基本的hello world程序: 打开终端,使用cd命令转到操作的目录,如我在home下的program files文件内创建, 就 ...

  10. ubuntu下安装摄像头应用程序xawtv

    准备工作:安装xawtv应用程序 方法一. 源码xawtv-3.95.tar.gz xawtv官网下载: http://www.kraxel.org/releases/xawtv/     下载后上传 ...

最新文章

  1. Arduino可穿戴教程ArduinoIDE新建编辑源文件
  2. HTML5 placeholder在低版本浏览器的解决方法
  3. on java8学习笔记2022.2.19-2022.2.20
  4. WPF 3D:使用GeometryModel3D的BackMaterial
  5. [转]android logo:内核、android开机动画
  6. Linux基本命令介绍
  7. 洛谷 P1843 奶牛晒衣服 1
  8. 再论《IT人员应聘建议》
  9. WINDOWS 2008的trustedinstallerexe占用过多CPU导致服务器性能下降的问题处理
  10. 微信H5分享钉钉分享设置方法
  11. solidworks_adams_simuilink联合仿真简易教程
  12. jsp 展示服务器pdf文件,jsp实现pdf在线预览功能
  13. 计算广告-商业化体系
  14. fastJson与String、对象、集合之间相互转换
  15. matplotlib 辅助线
  16. 黑马程序员-江远云 我的java语言基础之路4-语句篇
  17. centos安装 docker的教程
  18. NPN求解三极管电路或电容恒流放电详解,三极管工作在放大区,基极控制集电极电流,针对电荷泵电容恒流放电控制,因为电荷泵输出恒定电流给快充手机锂电池充电
  19. Pentaho Data Integration(Kettle) 6.0
  20. 华为可以更新鸿蒙系统,华为手机如何升级鸿蒙系统 步骤如下

热门文章

  1. GC overhead limit exceeded填坑心得
  2. Dirichlet分布深入理解
  3. 金三银五,金九银十,找工作的好时间
  4. 深入理解的JavaScript函数编程
  5. nyoj 8 一种排序(用vector,sort,不用set)
  6. butterknife 配置了点击和绑定无效
  7. HttpComponents HttpCore 4.3 Alpha1 发布
  8. Ant in Action读书笔记(一):Ant里的Property是immutable的
  9. 一张图看懂AI、机器学习和深度学习的区别
  10. 新举措!ACL系列会议引入滚动审稿机制