接受如何通过golang调用c/c++的(部分c++接口还是无法使用的)
- golang调用c/c++主要通过cgo, cgo原本只是为c设计的, 调用c代码,无需预编译,可以直接调用
- 如果是调用c++, 需要编译成libxx.a的编译包,然后进行调用
- 基础用法,在golang中直接调用c代码
- 将c代码写到h文件中,在go文件中调用
- c代码包含.c与.h文件,.h文件只包含声明,.c文件是实现;此方式需要引入hello.c文件
- c代码包含.c与.h文件,.h文件只包含声明,.c文件是实现;这里我们开始通过libxx.a的方式进行引入
- c代码包含.cpp与.h文件,.h文件只包含声明,.cpp文件是实现;这里只能通过libxx.a的方式进行引入
- golang与c进行集合类型的交互
- c代码与golang不在同一级代码,使用libxx.a的方式引用
- golang与c进行struct类型的交互
- golang调用c/c++的时候,c/c++有依赖lib(如果在c/c++中可以直接使用#pragma comment ( lib, "D3D11.lib"))
- golang中通过使用dll中的方法
- golang与c进行callback交互, 通过//export进行对应,可以同时多个export
- c调用golang的函数,与callback完全是一回事
C | CGO | golang |
---|---|---|
char | C.char | byte |
signed char | C.schar | int8 |
unsigned char | C.uchar | uint8 |
short int | C.short | int16 |
short unsigned int | C.ushort | uint16 |
int | C.int | int |
unsigned int | C.uint | uint32 |
long int | C.long | int32 or int64 |
long unsigned int | C.ulong | uint32 or uint64 |
long long int | C.longlong | int64 |
long long unsigned int | C.ulonglong | uint64 |
float | C.float | float32 |
double | C.double | float64 |
wchar_t | C.wchar_t | |
char* | string | |
bool | C.bool | bool |
void * | unsafe.Pointer |
- 注*: string(golang) --> char*(c) C.CString("张三")
- char*(c) --> string(golang) C.GoString(C.getString()) 详情看代码baseMain.go
C语言类型 | CGO类型 | Go语言类型 |
---|---|---|
int8_t | C.int8_t | int8 |
uint8_t | C.uint8_t | uint8 |
int16_t | C.int16_t | int16 |
uint16_t | C.uint16_t | uint16 |
int32_t | C.int32_t | int32 |
uint32_t | C.uint32_t | uint32 |
int64_t | C.int64_t | int64 |
uint64_t | C.uint64_t | uint64 |
- git init
- git remote add origin https://github.com/zj360202/TestCpp.git
- git pull origin master
- git add src/main.js
- git commit -m "first commit"
- git push -u origin master