之前说过golang调用C代码的方式可以通过cgo或者是swig,而cgo是不能使用
C++相关的东西的,比如标准库或者C++的面向对象特性。怎么办,将c++的功能函数封装成C接口,然后编译成动态库,或者是功能较为简单的可以直接嵌入到go源文件中。
cgo的使用是在linux平台上,在windows平台上可以配置交叉编译器。
- 动态库头文件:myfuns.h
- #pragma once
-
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdbool.h>
-
- void fun1();
-
- void fun2(int a);
-
- int func3(void **b);
-
- // others
- 动态库名:myfuns.so
- 项目简化结构:
- |-project
- | |-lib
- | | |-myfuns.so
- | |-include
- | | |-myfuns.h
- | |-src
- | | |-main.go
- | |-pkg
- | |-bin
- go链接动态库:main.go
通过CFLAGS
配置编译选项,通过LDFLAGS
来链接指定目录下的动态库。这里需要注意的一个地方就是import "C"
是紧挨着注释的,没有空行。