gpt4 book ai didi

戈朗 : How to link C objects using CGO_OFILES?

转载 作者:IT王子 更新时间:2023-10-29 01:27:53 29 4
gpt4 key购买 nike

因此,我正在拔头发。

我想要做的就是将一个 .o(C 目标文件)与一个 Go 包链接起来,这样 Go 包就可以调用 C 函数。

似乎没有关于cgo的CGO_OFILES参数的任何文档,在网上搜索后似乎是我需要的。

我试过将它放在 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.inc
TARG=tesseract
CGOFILES=tesseract.go
CGO_OFILES=doc-capi-tesseract.o
include $(GOROOT)/src/Make.pkg

%.o: %.cpp
$(HOST_CC) $(CGO_CFLAGS_$(GOARCH)) -g -O2 -fPIC -o $@ -c $^

但我不知道如何处理该文件。如果我运行 makemake myfilego build makefile 什么也不会发生。不知道如何使用它。

有人可以向我解释如何将 Go 文件链接到 C 目标文件吗?

最佳答案

  1. 你可以使用 SWIG因为它为您提供了更多功能。我刚刚学会了将它与 C++ ( example ) 结合使用,但该过程与 C 有 99% 的相似性。您可以在静态链接和动态链接之间进行选择,这两种方法都可以。
  2. 您可以通过定义正确的标志来强制 CGO 静态链接(example,尤其是提到的 github 存储库!)。

#2 的示例:

// #cgo CFLAGS: -Isrc/include  
// Where doc-capi-tesseract.h is!
// #cgo LDFLAGS: doc-capi-tesseract.a
// #include "doc-capi-tesseract.h"

import "C"

关于戈朗 : How to link C objects using CGO_OFILES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26418883/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com