栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Golang调用so文件示例

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang调用so文件示例

一:环境

需要借助gcc打包,window下执行有报错,建议再linux环境下

gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

go version go1.13.8 linux/amd64

二:具体步骤

1、在我们的 $GOPATH/src 路径下创建一个项目

2、在目录下创建一个c语言的头文件 hi.h 内容如下:

int demo(char *);

3、在目录下创建一个c语言的实现 hi.c 内容如下:

hi.c

#include 
#include 

int demo(char * s)
{
	int len = strlen(s);
    int map[256] = {0};				//哈希表
    int res = 0, l = 0, r = 0;
	while(r < len){					//遍历字符串
		if(map[s[r]] == 0){			//不是重复字符,右指针向右移动
            map[s[r++]]++;
        }else{						//遇到重复字符,左指针向左移动
			map[s[l++]]--;
        }
        res = len;		//更新最大长度
    }
	 char a = 'a';
	 s = &a;
     printf("s: %sn",s);

    return res;
}

   4、在目录下创建go启动文件 main.go 内容如下:

package main


import "C"
import (
	"fmt"
	"unsafe"
)

func main(){
	d := make([]byte,16)
	d = []byte("aabbccdd")
	str := C.CString(string(d))
	fmt.Println(C.demo(str))
	fmt.Println(string(d))
	C.free(unsafe.Pointer(str))
}

 5、编译c文件为so动态库,命令:

gcc -fPIC -shared -o libhi.so hi.c

6.创建lib目录,将编译得libhi.so移动进去

7.编译go build

 

8.执行有可能报错

 

vi /etc/profile

export LD_LIBRARY_PATH=/usr/local/src/lib  //lib所在地址

source /etc/profile 

三:go --> 转换

C.char
C.schar (signed char)
C.uchar (unsigned char)
C.short
C.ushort (unsigned short)
C.int
C.uint (unsigned int)
C.long
C.ulong (unsigned long)
C.longlong (long long)
C.ulonglong (unsigned long long)
C.float
C.double. 


unsafe.Pointer (void*)

// Go string to C string
func C.CString(string) *C.char

var val []byte
(*C.char)(unsafe.Pointer(&val[0]))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号