Golang生成C动态库.so和静态库.a
生活随笔
收集整理的這篇文章主要介紹了
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(){}注意:生成C可調用的so時,Go源代碼需要以下幾個注意。
編譯
先要安裝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 。如果想將自己所在的文件夾也添加到庫搜索目錄中去。那么有兩種方式:
如何生成靜態庫
只需要將buildmode改為c-archive即可。然后編譯時將靜態庫參與編譯即可。
Go調用C庫
源代碼
注意:
需要使用到cgo工具
?
?
總結
以上是生活随笔為你收集整理的Golang生成C动态库.so和静态库.a的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 方法使用总结(重载、数组输出、
- 下一篇: pymongo 的使用实例(超细)