Golang利用cgo使用C/C++资源的三种方式

2023-07-21  本文已影响0人  申_9a33

1.配置WindowsGCC环境

1.1下载mingw

image.png

1.2将mingw添加到环境变量

image.png

1.3 验证环境

image.png

2.创建一个golang项目编译链接c资源

2.1 内联式,直接在golang内部嵌入c语言

package main

/*
#include <stdio.h>

void SayHello() {
  printf("Hello World from DLL!");
}
*/
import "C"

func main() {
    C.SayHello()
}


2.2导入动态库.so 或 .dll 的形式

2.2.1 使用gcc编译动态库

#include <stdio.h>

void SayHello() {
  printf("Hello World from DLL!");
}
// mylib.h

#ifndef MYLIB_H
#define MYLIB_H

#ifdef __cplusplus
extern "C" {
#endif

void SayHello();

#ifdef __cplusplus
}
#endif

#endif // MYLIB_H

2.2.2编译成dll

gcc -shared -o mylib.dll mylib.c
gcc -fPIC -shared -o libmylib.so mylib.c

2.2.3 验证编译后dll

#include <stdio.h>
#include "mylib.h"

int main() {
  SayHello();

  return 0;
}

2.2.4 golang导入dll

package main

/*
#cgo windows LDFLAGS: -L. -lmylib
#cgo linux LDFLAGS: -L. -lmylib
#include "mylib.h"
*/
import "C"

func main() {
    C.SayHello()
}


2.3 外联式,链接C源文件,而不需要预先编译为库文件

package main

/*
#cgo CFLAGS: -I./mylib
#include "mylib.c"
*/
import "C"

func main() {
    C.SayHello()
}
上一篇下一篇

猜你喜欢

热点阅读