我使用自定义构建工具来编译项目,我需要一种在项目中使用cgo的方法。
问题是cgo文档只告诉你如何在make中使用它。
我真正需要知道的是,哪些生成的文件要处理哪些工具以及需要执行的顺序。我试着在go source目录中读取make.pkg,但我的努力失败了。
我的测试dll非常简单,一个函数每次调用时返回1,使用此函数的go代码同样简单。
通过在cgo项目上成功运行make生成的控制台输出将非常有用。
答案 0 :(得分:3)
在目录misc/cgo/life中的32位Linux上运行make
的输出:
# 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
答案 1 :(得分:1)
“我使用自定义构建工具来编译项目,我需要一种在项目中使用cgo的方法。”
......这种方法会导致问题。使用Makefile的标准方法简单,容易,经过验证,记录等等。
我意识到我不是(直接)回答你的问题。相反,我的“回答”是:我强烈建议使用标准方式。不要通过选择其他而非直接支持的选项为自己创造问题。
那就是说,我认为有一种方法可以避免Makefiles,我从来没有去过那里,抱歉。我通常懒惰/缺乏时间,所以我用最简单/最快的方式完成任务。您可能想尝试相同的操作; - )