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源代码需要以下几个注意。
先要安装go的标准库
go install -buildmode=shared -linkshared std
编译共享库
go build -buildmode=c-shared -o so库文件名 自己的项目
然后当前目录就会出现 xxx.h和xxx.so文件
#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 。如果想将自己所在的文件夹也添加到库搜索目录中去。那么有两种方式:
只需要将buildmode改为c-archive即可。然后编译时将静态库参与编译即可。
注意:
需要使用到cgo工具
package main
//#cgo LDFLAGS: -L ./ -lfoo 使用静态库时需要添加
//#include"xxx.h"
import "C"
xxxx
func main(){
C.xxx(xxx)
}
文章浏览阅读5.8k次。Web基础知识与常用技术
文章浏览阅读2.5k次。人人开源 获取定时任务CronTrigger出现异常报错信息:org.springframework.beans.factory.UnsatisfiedDependencyException:Error creating bean with name ‘scheduleJobController’: Unsatisfieddependency expressed through field ‘scheduleJobService’; nestedexception is org.springf
文章浏览阅读1.5k次。收取邮件有两种协议,POP3和IMAP,POP3相对于IMAP功能较少无法对邮件进行更深层次的操作,因此本文使用IMAP协议收取邮件。python提供了很多收邮件的模块,本文使用imaplib来接收邮件。前提需要在邮件箱的设置中打开允许IMAP,不同邮件开启全方式不同,具体开启方式自行百度。(本文使用outlook,默认开启)难点获得邮件不难,难点是如何解析邮件的内容,由于邮件内容的编码是不固定的..._python接收邮件內容
文章浏览阅读1.3w次,点赞25次,收藏396次。目录我们可以用zabbix监控哪些zabbix的主动监控与被动监控配置zabbix自定义监控流程安全组是什么,限制了3306的入规则,客户端还能访问吗Nagio监控?服务器一般需要监控哪些项目? 凭借这些项目如何判断服务器的瓶颈?zabbix监控mysql的io情况是否正常的流程监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。zabbix如何修改其中监控的一台服务器中内存阈值信息,比如正常内存使用到了 80%报**警,我想修改为 60%报警...
文章浏览阅读325次。Python 是一门上手快、优雅简洁的编程语言,其多范式、丰富的标准库和第三方库能够让编程人员把精力集中在逻辑和思维方法上,而不用去担心复杂语法、类型系统等外在因素,从而高效地达成自己的编程目标。Python 抽象层次非常高,这帮助我们更好更快地完成编程,但也屏蔽了很多细节,程序员也无法精确控制计算机底层的资源,代码性能优化就变得比较复杂。很多资深的程序员可能会觉得 Python 性能不够好,无法编写高性能的程序,其实这句话也不全对。对于计算密集型的程序,Python 可以通过扩展的形式使得核心计算直接调用_asyncio网络
文章浏览阅读2.1k次,点赞2次,收藏2次。笔记型博客之spring-声明式事务_spring容器事务
文章浏览阅读785次。<template> <div id="app"> <div id="login_container"></div> </div></template><script> import axios from 'axios' export default { name: 'App', components: {}, ...
文章浏览阅读2.2k次。pattern: 搜索包含指定模式的文本,可以使用向上或向下箭头浏览搜索结果。less filename: 查看指定文件的内容。Ctrl + g: 显示当前行号和文件名。n: 在搜索结果中跳转到下一个匹配项。N: 在搜索结果中跳转到上一个匹配项。Ctrl + f: 向下滚动一屏。Ctrl + b: 向上滚动一屏。Ctrl + d: 向下滚动半屏。Ctrl + u: 向上滚动半屏。G: 跳转到文件的最后一行。f: 显示文件名和当前行号。g: 跳转到文件的第一行。u: 向上滚动一屏。d: 向下滚动一屏。_less命令怎么跳转最后一行
文章浏览阅读5.5w次,点赞3次,收藏7次。题目链接题目描述蒜术师有一个分数序列 q1/p1, q2/p2, q3/p3, q4/p4, q5/p5,… ,其中qi+1= qi+ pi, pi+1=qi, p1= 1, q1= 2。比如这个序列前6项分别是2/1, 3/2, 5/3, 8/5, 13/8, 21/13。求这个分数序列的前n项之和。输入格式输入有一行,包含一个正整数n(n <= 30)。输出格式输出有一行,包含一个浮点数,表示分数序列前n项的和,精确到小数点后4位。Sample Input2Sample Out_求分数序列和c++
文章浏览阅读8.2k次,点赞38次,收藏18次。本文介绍Ubuntu如何安装gcc。_apt-get gcc
文章浏览阅读9.2k次。Sass 是 CSS 的改进版本,您现在就可以在 React 项目中使用它。_react 使用sass
文章浏览阅读211次。使用 Flutter 从头开始写一个 App是一件轻松惬意的事情。但是对于成熟产品来说,完全摒弃原有 App 的历史沉淀,全面转向 Flutter 并不现实。用 Flutter 去统一 iOS/Android 技术栈,把它作为已有原生 App 的扩展,然后通过逐步试验有序推进从而提升终端开发效率,可能才是现阶段 Flutter 最有效的集成方式。那么,Flutter 工程与原生工程该如何组织管理?..._flutter 打包ios 是原生app吗