使用cgo与go模块

huangapple go评论127阅读模式
英文:

Using cgo with go modules

问题

你需要将C库的.h和.a文件放在Go项目的根目录中。在Go项目中,C库的.h文件应该放在与Go源文件相同的目录中,而.a文件应该放在一个名为"lib"的子目录中。这样,Go编译器就能够找到并链接你的C库。

以下是一个示例项目结构:

- project_root
  - main.go
  - lib
    - your_library.a
  - your_library.h

在你的Go源文件中,你可以使用#cgo指令来告诉Go编译器如何链接C库。例如,如果你的C库名为"your_library",你可以在Go源文件中添加以下代码:

package main

// #cgo CFLAGS: -I./
// #cgo LDFLAGS: -L./lib -lyour_library
// #include "your_library.h"
import "C"

func main() {
    // 在这里调用你的C库函数
}

请确保在运行Go程序之前,你已经正确地编译了你的C库,并将生成的.a文件放在正确的位置。

英文:

I'm trying to create a go program and I need to use freetype, but module for freetype in go seems really different from the original freetype library for c. Overcome this problem I created a simple library in C, and I'm trying to call a function in that library from Go using cgo. But I couldn't seem to figure out where should my .a file needs to be located in order go to be able to find it. I'm using go modules and my project is not in the GOPATH.

So my question is where I need to put my C library's .h and .a files?

答案1

得分: 1

如果我理解正确的话,你遇到了一个问题,不知道如何告诉cgo工具链去哪里找.h和.a文件。网上有很多例子,我在这里提供一个。

代码示例

package democgo

/*
#cgo CFLAGS: -I ${你的_dot_H文件所在目录}
#cgo LDFLAGS: -L ${你的_dot_A文件所在目录} -l${你的_dot_A文件名} -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(),
		),
	)
}

请注意,这只是一个示例,你需要将${directory_of_your_dot_H}${directory_of_your_dot_A}替换为你实际的.h和.a文件所在的目录,将${your_dot_A_name}替换为你实际的.a文件名。

英文:

If i got you right. It's a problem that you don't know how to tell cgo tool chain where to find .h and .a files. There is many examples on web, provide mine here.

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 &quot;code_from_c.h&quot;
#include &lt;stdlib.h&gt;
*/
import &quot;C&quot;

// Hello is.
func Hello() {
	fmt.Println(&quot;this is CGO at package democgo&quot;)
	fmt.Println(
		C.GoString(
			C.HelloWorld(),
		),
	)
}

huangapple
  • 本文由 发表于 2022年2月20日 19:56:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/71194180.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定