1 回答

TA贡献1796条经验 获得超7个赞
我将用这个示例来解释它:
第一次构建libhello.a使用./libs/m.c:
#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
- 1 回答
- 0 关注
- 210 浏览
添加回答
举报