Golang中使用C/C++代码

go 调用 c/c++:

  1. C/C++代码直接写在go文件中使用,简单直观
  2. 导入动态库 .so 或 dll 的形式,最安全但是很不爽也比较慢的
  3. 直接引用 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)
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值