golang程序调用c或cplus程序

go 调用 c/c++ 函数的实现方式有:

  • 直接嵌套在go文件中使用,最简单直观的
  • 导入动态库 .so 或 dll 的形式,最安全但是很不爽也比较慢的
  • 直接引用 c/c++ 文件的形式,层次分明,容易随时修改看结果的
  1. 直接使用go文件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package main

/*
#include <stdio.h>
void hello(){
	printf("hello world");
}
*/
import "C"

func main() {
	C.hello()
}
1
go run main.go
  1. 导入动态库.so或.dll
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// hello.h
#include <stdio.h>

#ifdef __cplusplus
extern "C"
{
#endif
    // 导出函数库
    void helloworld();

#ifdef __cplusplus
}
#endif
1
2
3
4
5
6
7
8
// hello.c
#include "hello.h"

void helloworld()
{
    printf("Hello World\n");
    return;
}
1
2
3
4
5
6
7
8
9
使用 gcc 或 g++ 生成 .so库,或 win 下生成 dll
#gcc hello.c -fPIC -shared -o libhello.so
#gcc --share hello.c -o libhello.dll
#gcc main.c libhello.dll -o main.exe

# 或者
gcc -Wall -c hello.c
ar -rv libhello.a hello.o
go build main.go
  1. 直接引用 c/c++ 文件的形式
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package main

/*
#include "hello.c"
*/
import "C"

func main() {
	C.hello()
}