假设我有一个golang包,其中包含一些汇编代码:
libgtk2.0-dev
如果我尝试使用 demopkg/
source1.go
source2.go
asm_amd64.s
构建它,工具链将使用go build
来汇编* .s文件。
但如果我将Cgo添加到混合物中,只需将一个go tool asm
放入任何一个源中,go就会切换到gcc汇编程序。
我可以通过执行import "C"
来看到它。来自第一个案例的go build -n
来电被/usr/local/go/pkg/tool/linux_amd64/asm
的来电取代。除此之外,它开始抱怨语法错误。
是否记录了此行为,因此我可以依赖它来维护我的包裹?我可以强制gcc
使用一个精确的汇编程序吗?
答案 0 :(得分:2)
是的,它在cgo documentation
中当Go工具看到一个或多个Go文件使用特殊导入时 " C",它将在目录中查找其他非Go文件并进行编译 它们是Go包的一部分。任何.c,.s或.S文件都是 用C编译器编译。任何.cc,.cpp或.cxx文件都是 用C ++编译器编译。任何.h,.hh,.hpp或.hxx文件都会 不能单独编译,但是,如果这些头文件被更改, 将重新编译C和C ++文件。默认的C和C ++ 编译器可能会被CC和CXX环境变量更改, 分别;那些环境变量可能包括命令行 选项。