美文网首页
C调用go静态库

C调用go静态库

作者: ebayboy | 来源:发表于2019-03-29 16:54 被阅读0次

Go 生成C动态库.so和静态库.a

源代码

package main

import "C"

import "fmt"

//export hello

func hello(){

    fmt.Println("hello world")

}

//export add

func add(a,b int) int {

    return a+b

}

func main(){

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

注意:生成C可调用的so时,Go源代码需要以下几个注意。

必须导入 “C” 包

必须在可外部调用的函数前加上 【//export 函数名】的注释

必须是main包,切含有main函数,main函数可以什么都不干

编译

先要安装go的标准库

go install -buildmode=shared -linkshared std

1

编译共享库

go build -buildmode=c-shared -o so库文件名 自己的项目

1

然后当前目录就会出现 xxx.h和xxx.so文件

C

#include<stdio.h>

#include"libtest.h" //生成的头文件

void main(){

hello();

printf("\n2+3=%d\n",add(2,3));

}

1

2

3

4

5

6

7

8

编译:

gcc goso.c  -L ./ -ltest -o goso

1

执行

由于是共享库,那么运行时就需要加载需要的库。在linux中默认库的路径为/usr/lib 或者/usr/lib64 。如果想将自己所在的文件夹也添加到库搜索目录中去。那么有两种方式:

修改配置文件,将自己的目录添加到库搜索目录列表中去。/etc/ld.so.conf 然后执行ldconfig

修改环境变量,临时改变库搜索路径。 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:自己的目录

如何生成静态库

只需要将buildmode改为c-archive即可。然后编译时将静态库参与编译即可。

Go调用C库

源代码

注意:

需要使用到cgo工具

直接在import “C”之前添加一个注释。 然后使用C语法添加库的头文件。

针对共享库由于是操作系统管理程序运行加载的共享库,所以可以不用管,只需要将so库放入对应的目录即可。针对静态库,那么就要在代码中多添加一行,告诉编译器编译时需要连接的库。// #cgo LDFLAGS: -L ./ -lfoo

package main

//#cgo LDFLAGS: -L ./ -lfoo    使用静态库时需要添加

//#include"xxx.h"

import "C"

xxxx

func main(){

    C.xxx(xxx)

}

---------------------

作者:zouxinjiang

来源:CSDN

原文:https://blog.csdn.net/github_33719169/article/details/84827094

版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章

  • C调用go静态库

    Go 生成C动态库.so和静态库.a 源代码 package main import "C" import "fm...

  • dispatch_once执行两次

    动态库A1调用静态库B中的单例方法C 初始化一次 静态库A2调用静态库B中的单例方法C 重新初始化一次 disp...

  • GO调用C函数

    GO调用C函数 在很多场景下,在Go的程序中需要调用c函数或者是用c编写的库(底层驱动,算法等,不想用Go语言再去...

  • Android NDK秘籍--浅析静态库和动态库

    此篇文章介绍在Android NDK开发中静态库和动态库的知识,主要是编译C/C++库和调用C/C++库的方法和场...

  • C++ | 调用静态库

    1.创建Windows控制台应用程序 2.将Lib库和头文件拷贝到调用目录下 将创建好的静态库,拷贝到工程目录下。...

  • Android NDK秘籍--编译静态库、调用静态库

    此篇文章的目的: 将C/C++的源码直接编译成静态库,只能提供给底层调用。注:比较适用于将第三方开源库编译成静态库...

  • unity3d c#调用java

    c#调用java非静态方法 C#调用静态类,静态方法 ; CustomClass的静态类,SetData是它的静...

  • C语言如何制作静态库_day88

    一般C语言写的程序可以让其他语言进行调用,比如python, java,等等 c语言有两种库类型,静态库和动态库(...

  • C语言中静态库和动态库的区别,如何使用它们

    一般C语言写的程序可以让其他语言进行调用,比如python, java,等等 c语言有两种库类型,静态库和动态库(...

  • 函数库的制作

    静态库的制作流程:main函数里面调用静态库函数里面提供的static_lib_test();进行测试main.c...

网友评论

      本文标题:C调用go静态库

      本文链接:https://www.haomeiwen.com/subject/bvcrbqtx.html