因为这个,我正在拔头发。我想要做的就是将 .o(C 目标文件)与 Go 包链接起来,以便 Go 包可以调用 C 函数。似乎没有关于CGO_OFILEScgo 参数的任何文档,这似乎是我经过大量互联网搜索后所需要的。我试过把它放在 Go 文件的顶部:/*#cgo CGO_OFILES: doc-capi-tesseract.o#include <stdlib.h>#include "doc-capi-tesseract.h"*/import "C"但这给了我错误invalid #cgo verb: #cgo CGO_OFILES: doc-capi-tesseract.o。然后我在某处读到可以使用makefile,所以我制作了这个可能不正确的makefile:include $(GOROOT)/src/Make.incTARG=tesseractCGOFILES=tesseract.goCGO_OFILES=doc-capi-tesseract.oinclude $(GOROOT)/src/Make.pkg%.o: %.cpp $(HOST_CC) $(CGO_CFLAGS_$(GOARCH)) -g -O2 -fPIC -o $@ -c $^但我不知道如何处理该文件。如果我运行makeormake myfile或 ,则不会发生任何事情go build makefile。不知道如何使用它。有人可以向我解释如何将 Go 文件链接到 C 目标文件吗?
2 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
您可以使用SWIG,因为它为您提供了更多功能。我刚刚学会了将它与 C++(示例)一起使用,但该过程与 C 99% 相似。您可以在静态和动态链接之间进行选择,这两种方法都可以使用。
您可以通过定义正确的标志来强制 CGO 静态链接(例如,尤其是提到的 github repo!)。
#2 的示例:
// #cgo CFLAGS: -Isrc/include
// Where doc-capi-tesseract.h is!
// #cgo LDFLAGS: doc-capi-tesseract.a
// #include "doc-capi-tesseract.h"
import "C"
- 2 回答
- 0 关注
- 228 浏览
添加回答
举报
0/150
提交
取消