将 cgo 与 go 模块一起使用
Using cgo with go modules
我正在尝试创建一个 go 程序,我需要使用 freetype,但是 go 中的 freetype 模块似乎与 c 的原始 freetype 库确实不同。克服这个问题我在 C 中创建了一个简单的库,我正在尝试使用 cgo 从 Go 调用该库中的函数。但我似乎无法弄清楚我的 .a 文件应该位于何处才能找到它。我正在使用 go 模块,但我的项目不在 GOPATH 中。
所以我的问题是我需要将 C 库的 .h 和 .a 文件放在哪里?
如果我没猜错的话。这是一个问题,您不知道如何告诉 cgo 工具链在哪里可以找到 .h 和 .a 文件。网上有很多例子,这里提供我的。
code_example
package democgo
/*
#cgo CFLAGS: -I ${directory_of_your_dot_H}
#cgo LDFLAGS: -L ${directory_of_your_dot_A} -l${your_dot_A_name} -lstdc++
#include "code_from_c.h"
#include <stdlib.h>
*/
import "C"
// Hello is.
func Hello() {
fmt.Println("this is CGO at package democgo")
fmt.Println(
C.GoString(
C.HelloWorld(),
),
)
}
我正在尝试创建一个 go 程序,我需要使用 freetype,但是 go 中的 freetype 模块似乎与 c 的原始 freetype 库确实不同。克服这个问题我在 C 中创建了一个简单的库,我正在尝试使用 cgo 从 Go 调用该库中的函数。但我似乎无法弄清楚我的 .a 文件应该位于何处才能找到它。我正在使用 go 模块,但我的项目不在 GOPATH 中。
所以我的问题是我需要将 C 库的 .h 和 .a 文件放在哪里?
如果我没猜错的话。这是一个问题,您不知道如何告诉 cgo 工具链在哪里可以找到 .h 和 .a 文件。网上有很多例子,这里提供我的。
code_example
package democgo
/*
#cgo CFLAGS: -I ${directory_of_your_dot_H}
#cgo LDFLAGS: -L ${directory_of_your_dot_A} -l${your_dot_A_name} -lstdc++
#include "code_from_c.h"
#include <stdlib.h>
*/
import "C"
// Hello is.
func Hello() {
fmt.Println("this is CGO at package democgo")
fmt.Println(
C.GoString(
C.HelloWorld(),
),
)
}