Golang生成C动态库.so和静态库.a
Go 生成C动态库.so和静态库.a
源代码
package mainimport "C"
import "fmt"//export hello
func hello(){fmt.Println("hello world")
}
//export add
func add(a,b int) int {return a+b
}
func main(){}
编译
go install -buildmode=shared -linkshared std
go build -buildmode=c-shared -o 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 。如果想将自己所在的文件夹也添加到库搜索目录中去。那么有两种方式:
- 修改配置文件,将自己的目录添加到库搜索目录列表中去。/etc/ld.so.conf 然后执行ldconfig
- 修改环境变量,临时改变库搜索路径。 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:自己的目录
如何生成静态库
只需要将buildmode改为c-archive即可。然后编译时将静态库参与编译即可。
Go调用C库
源代码
- 直接在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)
}
Golang生成C动态库.so和静态库.a相关推荐
- go语言调用c 的头文件 so,Golang生成共享库(shared library)以及Golang生成C可调用的动态库.so和静态库.a...
Golang类似于C的静态语言,效率也接近于C,如果Golang也可以导出可供C调用的库,那可以和很多高级语言say goodbye了,goodbye似乎又有点武断,但至少说,Golang可以做很多事 ...
- Visual studio那些破事。。。(生成静态库、生成动态库、引用静态库、引用动态库)
共4个小步骤,每个小步骤你都可以新建个VS解决方案,自己跟着步骤跑一下,windows怎么[生成静态库.生成动态库.引用静态库.引用动态库]你就基本明白了@! 文章目录 1.导出静态库.lib(add ...
- 库文件:静态库与动态库的生成和使用
0.引言 当进行C语言的编写时,想要查看标准库的某个函数是怎样实现的,比如 stdio.h 里的 printf 函数,跳转后只能看见函数声明,而无法跳转到函数的定义处,为什么无法查看函数的定义,这就涉 ...
- Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明
本文描述的是windows系统下,通过qtcreator在pro文件中添加动态库与静态库的方法: 1.添加动态库(直接添加动态库文件.dll,非子项目) 通过qtcreator创建动态库的方法就不在此 ...
- Visual Studio引入外部库 ---- 弄懂静态库lib和动态库dll
这两天由于想要研究一下socket的相关内容,但是没想到引入外部库还有这么多门道. 根据维基百科定义:一个现代编译器的主要工作流程如下:源代码(source code)→ 预处理器(preproces ...
- Linux下动态库(.so)和静态库(.a)
linux下有两种库:动态库和静态库(共享库) 二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大. 动态库(共享库)的代码在可执行程序运行时才 ...
- Ubuntu中动态库.so和静态库.a介绍
Ubuntu中.so和.a后缀的文件介绍 ( 今天在编译某个开源代码的时候遇到glog库的链接问题,由于对.so和.a动态库和静态库不够明白,于是学习了一波) 转自:http://www.cnblog ...
- Linux下动态库(.so)和静态库(.a) 的区别
linux下有两种库:动态库和静态库(共享库) 二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大. 动态库(共享库)的代码在可执行程序运行时才载入内 ...
- 【Android FFMPEG 开发】Android Studio 中配置 FFMPEG 库注意事项 ( 静态库 链接 libz.so 库 | 导入 FFMPEG 函数库顺序 )
文章目录 I . 导入 z 库 ( FFMPEG 动态库 与 静态库区别 ) II . FFMPEG 库引入顺序 III . Android Studio 中 FFMPEG 静态库引入完整 CMake ...
最新文章
- 安防行业成巨头必争之地 一文梳理安防AI芯片产品与主要企业
- 在Matlab符号计算中灵活运用assume
- Spring Validation 校验
- libinjection开源库的研究总结
- 【C语言进阶深度学习记录】十 C语言中:struct的柔性数组和union分析
- redis等缓存和mysql的数据同步问题解决思路
- windows下安装yarn
- 实习日记--git的使用
- (读书笔记).NET大局观—.NET引介
- VS Code利用GIT对源码进行管理
- Vue3 京东到家项目实战第一篇(首页及登录功能开发) 进阶式掌握vue3完整知识体系
- 书单收藏 | 17本中信版畅销书从科普、商业到技术带你轻松理解区块链
- org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defin
- SVM支持向量机算法做预测,matlab,预测精度非常高
- FCN网络(Fully Convolutional Networks for Semantic Segmentation)
- 集成产品开发,不让你的产品变现脚踩西瓜皮
- 安卓来电归属地_比尔·盖茨懊悔让微软损失4000亿美金!当年为何会与安卓失之交臂?...
- SpringBoot整合redis缓存(一)
- android开发_表单上传图片及其它参数
- JAVA多线程终止线程、退出线程、Interrupt()方法、苦逼的搬砖工
热门文章
- TIOBE 2021年3月程序语言排名 - python要超越Java排第二了?
- NGS系列文章 - 高通量测序原理
- PDF Expert使用教程:如何在Mac上使用PDF Expert编辑PDF
- python编写sql注入工具-利用Python实现SQL注入 - Python黑客编程入门系列 - 8
- 2.1基本算法之枚举_1812完美立方
- NOIP2013普及组复赛试题_计数问题
- 第29课 布纳特老师出的难题 《小学生C++趣味编程》
- 第43课 最大公约数 《小学生C++趣味编程》
- 哪里有2003系统服务器,服务器2003系统
- RTX5 | 线程标志组01 - 线程同步