当前位置:   article > 正文

golang生成供C调用的动态库_c调用golang动态库

c调用golang动态库

创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点!

个人座右铭:
1.没有横空出世,只要厚积一定发。
2.你可以学历不高,你可以不上学,但你不能不学习

一、golang代码(以操作MySQL为例)

package main 

import "C"

import (

    "database/sql"

    "fmt"

    _ "github.com/go-sql-driver/mysql"

    "time"

    "log"

    _ "github.com/jmoiron/sqlx"

)

var MysqlDb *sql.DB

//export MySQL_conn

func MySQL_conn(dbDSN string)(int){

    //1.打开数据库

    MysqlDb, MysqlDbErr = sql.Open("mysql", dbDSN)//打开数据库失败

    if MysqlDbErr != nil {

        fmt.Print("open mysql failed!\n")

        var r = -1

        return r

    }

    fmt.Print("open mysql succeed!\n")

    MysqlDb.SetConnMaxLifetime(100*time.Second)

    var r = 0

    return r

}

func main(){

}

注意核心点:

        1.必须导入“C”包,import "C"

        2.必须在外部条用的函数加上://export 函数名(//export MySQL_conn)

        3.必须是main包,main函数什么都不做

二、编译

        1.安装go的标准库

             go install -buildmode=shared -linkshared std

        2.编译生成动态库,例如源文件名:hello.go

            go build -buildmode=c-shared -o  libhello.so  hello.go  

             注意:hello.go是源文件名称

                        libhello是自己所起的库名称

        3.查看文件夹会新增:libhello.h 和libhello.so

           libhello.h:供C程序调用的头文件

           libhello.so:生成的动态库

   三、libhello.sh讲解

        

         这是C的重命名

        

        这是函数的声明

 多参数函数的返回值定义

 

        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/173734
推荐阅读
相关标签
  

闽ICP备14008679号