使用go生成动态链接库 .so 文件,以及C的调用

                                                            使用go生成动态链接库 .so 文件,以及C的调用

一. go生成.so文件

这里写一个简单的返回输入的字符串的函数

package main

import "C"

func main() {

}

//export StrReturn

func StrReturn(str *C.char) *C.char {

return str

}

注意 :
    (1)因为c的字符串和go的字符串是不同的类型,所以这里引用  import "C" 后,使用*C.chat类型
    (2)要导出的函数 ,需要添加注释 "export 导出的函数名" ,注意注释需要紧挨着函数

接下来编译出.so文件,使用go build的子命令

go build -x -v -ldflags "-s -w" -buildmode=c-shared -o libstrreturn.so main.go

此命令会生成  .so文件和.h文件



二. C调用生成的.so文件

写一个简单的调用,然后打印

#include <stdio.h>

#include "libstrreturn.h"

int main()

{

    char *input = "12345678";

    char *output =  StrReturn(input);

    printf("%s\n", output);

    return 0;

}

编译代码时,把.so一起编译:

gcc  -o  main  main.c  ./strreturn.so

得到main可执行文件

执行main,输出12345678

注意:

    (1)编译时需要把.so文件一同编译,否则直接执行会报错
    (2)在某个系统生成的.so文件,需要在同类系统下调用运行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容