1,將c++ 的方法提取到頭檔案.h中( )
2,編譯cc(c++)檔案為動態鏈結庫so檔案 gcc -fpic -shared hello.c -o libhello.so
3,將標頭檔案放入include目錄 .so放入lib目錄
4,go程式中指定 cflags 和 ldflags
#cgo cflags: -i ./include
#cgo ldflags: -l .
-wl,-rpath,/usr/local
5,執行(go 程式的時候)發布時候指定 export ld_library_path="lib檔案所在目錄" (`pwd`)
export ld_library_path=./lib
目錄結構:
|-project編譯為so檔案| |-lib
| | |-libhello.so
| |-include
| | |-hello.h
| |-src
| | |-main.go
| |-pkg
| |-bin
g++ -g -wall -lssl -lcrypto -c decrypter.cc -fpic -shared -olibdecrypter.sogo檔案:
package mainhello.c/* #cgo cflags: -i ./include
#cgo ldflags: -l ./lib -lhello
#include "hello.h"
*/
import "c"
func main()
#include "hello.h"hello.h#include void hello(const char *str)
#ifndef ___hello___編譯: go build main.go#define __hello___
void hello(const char *str);
#endif
編譯如果出錯:
# command-line-arguments
/tmp/go-build471704263/command-line-arguments/_obj/xx.cgo2.o: in function `_cgo_7f644bb4ca7c_cfunc_***x':
請一定檢查so檔案是否為lib***.so
編譯如果報錯 could not determine kind of name for c.***
請檢查 import "c" 是不是緊挨著 go頂部標頭檔案c++ 部分注釋**
執行: ./main
執行如果出現: error while loading shared libraries: ***.so: cannot open shared object file: no such file or directory
請一定要 export ld_library_path="動態鏈結檔案所在目錄"
其他說明:golang的注釋中直接寫函式內容的方式只支援c不支援c++
package main//!!!!以下為c**不支援c++
/* #include #include #include void hello(const char *str)
*/
import "c"
func main()
Golang反射呼叫函式
首先,來看看這段 php view source print?1functionfoobar 4 funcs array 5 foobar foobar 6 hello foobar 7 8 funcs foobar 9 funcs hello 它會輸出 view source print?1mik...
golang呼叫lua指令碼
import github.com aarzilli golua lua 2 呼叫lua指令碼的幾個重要函式 l lua.newstate 建立乙個lua虛擬機器 l.dofile 設定要呼叫的lua檔案 l.getfield lua.lua globalsindex,獲取lua指令碼的符號 l.c...
golang延遲呼叫(defer)
defer特性 關鍵字 defer 用於註冊延遲呼叫。這些呼叫直到 return 前才被執。因此,可以用來做資源清理。多個defer語句,按先進後出的方式執行。defer語句中的變數,在defer宣告時就決定了。defer用途 關閉檔案控制代碼 鎖資源釋放 資料庫連線釋放 defer的觸發packa...