前言:Golang调用是通过cgo完成的,Golang调用C++,则需要将C++函数导出包装为C函数,然后再通过cgo完成调用,话不多说,直接给出调用示例。
开发工具:Clion,Goland
首先msys2,通过msys2安装mingw,cmake等开发C,C++的环境,golang开发环境自行搭建。
本次示例目录结构如下:
-->cgo 项目根目录
---->cshare C项目根目录
------>cplusplus C++项目根目录
-------->library.h C++库头文件
-------->library.cpp C++库源文件
-------->library_wrapper.h C++库包装头文件
-------->library_wrapper.cpp C++库包装源文件
------>library.h C库头文件
------>library.c C库源文件
------>library_wrapper.h C++库头文件
------>main.c C执行文件
------>CMakeList.txt CMake文件
---->add.go golang调用C++示例
---->file_reader.go golang调用C示例
Golang调用C示例过程说明
1.在library.h中声明一个golang要调用的函数,如下所示
#ifndef CSHARE_LIBRARY_H #define CSHARE_LIBRARY_H void hello(); //简单测试示例 void readFile(const char* filename); //golang通过C读取任意位置文件,读取255个字符 int add(int x,int y);//golang通过C调用C++的加法 #endif //CSHARE_LIBRARY_H
2.在library.c中实现library.h中声明的函数,如下所示
3.在file_reader.go中实现对C方法readFile的调用
至此Golang调用C的过程结束,在Golang中调用C库源文件,不需要调用C库的头文件,因为C库源文件中已经导入过C库头文件,所以不用再Golang文件导入了。