加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang:如何使用CGO_OFILES链接C对象?

发布时间:2020-12-16 19:03:30 所属栏目:大数据 来源:网络整理
导读:因为这个我正在拔头发. 我想要做的就是将.o(C对象文件)与Go包链接起来,以便Go包可以调用C函数. 似乎没有关于cgo的CGO_OFILES参数的任何文档,这似乎是我在多次上网搜索后所需要的. 我已经尝试将它放在Go文件的顶部: /*#cgo CGO_OFILES: doc-capi-tesseract.o
因为这个我正在拔头发.

我想要做的就是将.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"

但这给了我无效的错误#cgo动词:#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 $^

但我不知道该如何处理该文件.如果我运行make或make myfile或者生成makefile,则没有任何反应.不知道如何使用它.

有人可以向我解释如何将Go文件链接到C对象文件?

>您可以使用 SWIG,因为它为您提供更多功能.我刚刚学会了将它与C( example)一起使用,但该过程与C类似99%.您可以选择静态和动态链接,两种方法都可行.
>您可以通过定义正确的标志强制CGO静态链接( example,尤其是提到的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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读