Golang生成C动态库.so和静态库.a_go build 生成包含库文件的程序-程序员宅基地

技术标签: Golang  c语言  golang  开发语言  

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(){

}

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

  1. 必须导入 “C” 包
  2. 必须在可外部调用的函数前加上 【//export 函数名】的注释
  3. 必须是main包,切含有main函数,main函数可以什么都不干

编译

先要安装go的标准库

go install -buildmode=shared -linkshared std

编译共享库

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

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

C

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

void main(){
	hello();
	printf("\n2+3=%d\n",add(2,3));
}

编译:

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

执行

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

  1. 修改配置文件,将自己的目录添加到库搜索目录列表中去。/etc/ld.so.conf 然后执行ldconfig
  2. 修改环境变量,临时改变库搜索路径。 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:自己的目录

如何生成静态库

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

Go调用C库

源代码

注意:

需要使用到cgo工具

  1. 直接在import “C”之前添加一个注释。 然后使用C语法添加库的头文件。
  2. 针对共享库由于是操作系统管理程序运行加载的共享库,所以可以不用管,只需要将so库放入对应的目录即可。针对静态库,那么就要在代码中多添加一行,告诉编译器编译时需要连接的库。// #cgo LDFLAGS: -L ./ -lfoo
     
package main

//#cgo LDFLAGS: -L ./ -lfoo     使用静态库时需要添加
//#include"xxx.h"
import "C"
xxxx
func main(){
    
    C.xxx(xxx)
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012206617/article/details/106976938

智能推荐

Git解决fatal: unable to connect to github.com_fatal: unable to connect to git.newcapec.cn: git.n-程序员宅基地

文章浏览阅读1.6w次,点赞11次,收藏10次。git clone git://github.com/lajos/iFrameExtractor.git错误信息:bower error status code of git: 128fatal: unable to connect to github.com:github.com[0: 你的IP]: errno=Operation timed out原因:需要用https才能读到数..._fatal: unable to connect to git.newcapec.cn: git.newcapec.cn[0: 192.168.0.19

全网最强HTTP+Fiddler抓包实战教程 干得不能再干 (超级全面图文)_http抓包-程序员宅基地

文章浏览阅读1.5w次,点赞48次,收藏187次。居然有人干了5年开发,居然抓包都不会!但是不要怕,不要哭,跟着我学一定有收获! 兴趣就是你最好的老师,有兴趣就一定要学下去 ,卷死他们!_http抓包

LabView与SQL Server的连接 【转】_labview与sqlserver-程序员宅基地

文章浏览阅读1.2k次。 摘要:本文介绍LabView与SQL Server的连接方法。关键字:LabView、SQL Server、连接。 正文:在用LABVIEW进行数据采集分析过程中,一般会用到数据库。在数据量很大的场合,可考虑使用SQL SERVER。下面就介绍LABVIEW与SQL SERVER的连接方法。连接思路:先在SQL SERVER建立自己的数据库,如MyDB。然后在操作系统建立一数据源(ODBC),此数据源的驱动选择SQL S_labview与sqlserver

python从入门到精通 pdf 完整超清版-Python从入门到精通PDF高清完整版免费下载|百度云盘...-程序员宅基地

文章浏览阅读1.9k次。提取码:xahb内容简介《Python从入门到精通》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分22章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表与元组、字典与集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、异常处理及程序调试、文件及目录操作、操作数据库、GU..._python网络编程从入门到精通 pdf

易语言连接Mysql_易语言链接mysql-程序员宅基地

文章浏览阅读8.9k次。最近在写游戏的辅助工具研究了下易语言,下面就说下如何连接Mysql。.版本 2.支持库 mysql.支持库 specMysql句柄 = 连接MySql (“127.0.0.1”, “root”, “root123”, “test”, 3306)查询部门语句 = “select * from department”执行SQL语句 (Mysql句柄, 查询部门语句)记录集..._易语言链接mysql

智慧树如何复制粘贴_智慧树怎么复制粘贴-程序员宅基地

文章浏览阅读9.7k次,点赞5次,收藏11次。智慧树如何复制粘贴_智慧树怎么复制粘贴

随便推点

Visual Studio 2012,运行后窗口闪退解决方法大全_visual2012闪退-程序员宅基地

文章浏览阅读2.2k次。相信各位都有一种想要打人的节奏,每次编写代码,在代码编写好了之后,运行编译代码却出现窗口闪退的结果,下面,我将介绍几种解决Visual Studio 2012运行后窗口闪退方法。希望可以帮助大家解决这个问题。 方法一:运行程序时按 Ctrl +F5 ,然后运行程序。 此方法只是解决一般的闪退,菜鸟级的新手如果出现闪退,不_visual2012闪退

【笔记】行测——常识判断之地理常识总结与归纳(二)_重庆四川行测笔记汇总-程序员宅基地

文章浏览阅读759次。第二章 世界地理一、海陆概况(一)七大洲(二)七大洲大小(三)大洲分界线(四)四大洋(五)海峡和运河二、山川湖泊(一)高原、平原、山脉(二)河流、城市与文明(三)世界之最第三章 中国地理一、中国地理概况1.位置半球维度海陆2.疆域面积四至临海3.邻国二、山形地貌(一)四大高原(二)四大盆地(三)三大平原(四)三大丘陵(五)名山大川1.五岳2.三山(六)宗教名山1.四大佛教名山2.四大道教名山(七)著名地貌1.喀斯特地貌2.丹霞地貌3.雅_重庆四川行测笔记汇总

Unity-URP RenderFeature CommandBuffer.DrawMesh始终是蓝色的?_unity urp偏蓝-程序员宅基地

文章浏览阅读186次。URP CommandBuffer.DrawMesh 渲染不正确的?_unity urp偏蓝

虚幻4中的程序化生成【1】程序化生成河流。_虚幻4河流demo-程序员宅基地

文章浏览阅读7.5k次,点赞7次,收藏34次。给自己立了很多flag,由于时间原因很多系列都还在写,算是循序渐进的总结。在程序化生成系列里,将会有如下记述:【1】程序化生成河流主要内容有@1 shader的自动调整(如河流的深浅,河水的波涛程度) @2 河流形状的调整,我们只需要编辑一条样条线,河流根据这条样条线自适应形状。【2】程序化生成森林主要内容有:@1用随机种子随机生成森林。减少美_虚幻4河流demo

Windows系统目录及常用快捷键_目录后的............快捷键-程序员宅基地

文章浏览阅读6.2k次。1.系统目录用户目录存放用户登录后的配置文件Windows目录为系统安装目录 system32存放系统配置文件 config目录内的SAM文件存放用户的账户和密码,备份后删除该文件登录用户无需密码(需要使用第三方PE才能操作该文件) drives目录下 etc目录内的hosts文件存放用于解析域名的地址 program file(x86):64位操作系统才有的目录。32位应用程序安装于该目录 program file:应用程_目录后的............快捷键

simplexml_load_string-程序员宅基地

文章浏览阅读590次。2019独角兽企业重金招聘Python工程师标准>>> ...