[英]Cannot use already compiled C library using cgo in Golang application?
我正在嘗試在Golang中包裝一個C庫。 我正在嘗試在已編譯的庫中調用C函數。 我同時有一個.a
文件和.so
庫文件。
我需要在哪里放置庫文件,如何告訴cgo
我正在使用這些庫?
我是C語言的新手。非常感謝您的幫助。
我將通過以下示例進行解釋:
首先建立libhello.a
使用./libs/mc
:
#include <stdint.h>
extern uint64_t Add(uint64_t a, uint64_t b) {
return a + b;
}
對於此測試示例, libhello.a
位於./libs/
:
m.go
└───libs
m.c
libhello.a
然后go build
此m.go
工作示例:
package main
//#cgo LDFLAGS: -L${SRCDIR}/libs -lhello
//#include <stdint.h>
//extern uint64_t Add(uint64_t a, uint64_t b);
import "C"
import (
"fmt"
)
func main() {
fmt.Println(C.Add(C.uint64_t(10), C.uint64_t(20))) // 30
}
輸出:
30
解析cgo指令后,任何出現的字符串$ {SRCDIR}都將替換為包含源文件的目錄的絕對路徑。 這樣可以將預編譯的靜態庫包含在包目錄中並正確鏈接。 例如,如果軟件包foo位於/ go / src / foo目錄中:
// #cgo LDFLAGS: -L${SRCDIR}/libs -lfoo
將擴展為:
// #cgo LDFLAGS: -L/go/src/foo/libs -lfoo
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.