为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不使用make的情况下使用cgo?

如何在不使用make的情况下使用cgo?

Go
呼唤远方 2021-04-26 13:38:41
我使用自定义构建工具来编译go项目,并且需要一种在项目中使用cgo的方法。问题在于cgo文档仅告诉您如何将其与make一起使用。我真正需要知道的是哪些生成的文件可以使用哪些工具进行处理以及需要以什么顺序进行处理。我试图在go源目录中读取make.pkg,但我的最大努力失败了。我的测试dll非常简单,每次调用时都会返回1的单个函数,使用该函数的go代码也同样简单。在cgo项目上成功运行make所产生的控制台输出将非常有帮助。
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

make在misc / cgo / life目录中的32位Linux上运行的输出:


# gomake _obj/life.a

CGOPKGPATH= cgo --  life.go 

touch _obj/_cgo_run

8g  -o _go_.8  _obj/life.cgo1.go _obj/_cgo_gotypes.go

8c -FVw -I ${GOROOT}/pkg/linux_386 -I . -o "_cgo_defun.8" _obj/_cgo_defun.c

gcc -m32 -I . -g -fPIC -O2 -o _cgo_main.o -c   _obj/_cgo_main.c

gcc -m32 -g -fPIC -O2 -o c-life.o -c   c-life.c

gcc -m32 -I . -g -fPIC -O2 -o life.cgo2.o -c   _obj/life.cgo2.c

gcc -m32 -I . -g -fPIC -O2 -o _cgo_export.o -c   _obj/_cgo_export.c

gcc -m32 -g -fPIC -O2 -o _cgo1_.o _cgo_main.o c-life.o life.cgo2.o _cgo_export.o  

cgo -dynimport _cgo1_.o >_obj/_cgo_import.c_ && mv -f _obj/_cgo_import.c_ _obj/_cgo_import.c

8c -FVw -I . -o "_cgo_import.8" _obj/_cgo_import.c

rm -f _obj/life.a

gopack grc _obj/life.a _go_.8  _cgo_defun.8 _cgo_import.8 c-life.o  life.cgo2.o _cgo_export.o

该行将cgo -- life.go创建以下文件:


_obj/_cgo_.o

_obj/life.cgo1.go

_obj/life.cgo2.c

_obj/_cgo_gotypes.go

_obj/_cgo_defun.c

_obj/_cgo_main.c

_obj/_cgo_flags

_obj/_cgo_export.c

_cgo_export.h


查看完整回答
反对 回复 2021-05-10
?
喵喔喔

TA贡献1735条经验 获得超5个赞

我使用自定义构建工具来编译go项目,并且需要一种在项目中使用cgo的方法。 ”

...而这种方法会导致问题。使用Makefile的标准方式非常简单,容易,经过证明,已记录等。

我意识到我没有(直接)回答您的问题。相反,我的“答案”是:我强烈建议使用标准方式。不要通过选择其他不受直接支持的选项来为自己制造问题。

就是说,我想有一种避免Makefile的方法,对不起,我从来没有去过那里。我通常很懒/没有时间,所以我用最简单/最快的方式完成工作。您可能想尝试相同的;-)


查看完整回答
反对 回复 2021-05-10
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信