面试题答案
一键面试创建包含加法函数的动态库
-
编写Go代码: 创建一个文件,例如
add.go
,内容如下:// add.go package main //export Add func Add(a, b int) int { return a + b }
这里使用
//export Add
注释来导出Add
函数,以便外部程序可以调用。 -
构建动态库: 在命令行中执行以下命令构建动态库:
go build -buildmode=c-shared -o add.dll add.go
-buildmode=c-shared
表示构建C共享库格式的动态库,在Windows下生成.dll
文件,在Linux下生成.so
文件。-o add.dll
指定输出的动态库文件名,在Linux下应改为-o add.so
。
在另一个Go程序中调用动态库函数
-
创建调用程序: 创建一个新的Go文件,例如
main.go
,内容如下:package main /* #cgo LDFLAGS: -L. -ladd #include "add.h" #cgo windows LDFLAGS: -Wl,--kill-at #cgo darwin LDFLAGS: -undefined dynamic_lookup */ import "C" import ( "fmt" ) func main() { a := 3 b := 5 result := int(C.Add(C.int(a), C.int(b))) fmt.Printf("The result of %d + %d is %d\n", a, b, result) }
#cgo LDFLAGS: -L. -ladd
:指定链接器在当前目录(-L.
)查找名为add
的库(-ladd
)。#include "add.h"
:引入由Go生成的C头文件,该头文件包含导出函数的声明。- 不同操作系统下可能需要额外的链接标志,如
#cgo windows LDFLAGS: -Wl,--kill-at
和#cgo darwin LDFLAGS: -undefined dynamic_lookup
。
-
运行调用程序: 在命令行中执行以下命令运行程序:
go run main.go
程序将会调用动态库中的
Add
函数并输出结果。