go 调用 c/c++:
- C/C++代码直接写在go文件中使用,简单直观
- 导入动态库 .so 或 dll 的形式,最安全但是很不爽也比较慢的
- 直接引用 c/c++ 文件的形式,层次分明,容易随时修改看结果的
1.1 直接嵌套在Go语言中
Example:
package main
/*
// C
#include <stdio.h>
int add(int a,int b){
return a+b;
}
*/
import "C" // 切勿换行再写这个
import "fmt"
func main() {
fmt.Println(C.add(2, 1))
}
1.2 动态库 .so 或 .dll 的形式
优点:动态库难破解,安全系数高
缺点:加载动态库慢,影响效率
C/C++ 源文件:
//myFunc.h
#ifndef MYFUNC_H
#define MYFUNC_H
int add(int a, int b);
#endif
#include <stdio.h>
#include "myFunc.h"
int add(int a, int b){ // 实现
return a + b;
}
生成动态链接库
gcc video.c -fPIC -shared -o libmyfunc.so
在Go中使用
package main
/*
#cgo CFLAGS: -Iinclude
#cgo LDFLAGS: -Llib -llibmyfunc
#include "myFunc.h"
*/
import "C"
import "fmt"
func main() {
C.add(1,2)
}
1.3 直接引用C/C++文件
优点: 方便调试
继续接用上个例子的myfunc.h myfunc.c文件
package util
/*
#include "myFunc.c"
*/
import "C"
import "fmt"
func GoSum(a,b int) int {
s := C.add(C.int(a),C.int(b))
fmt.Println(s)
}