golang在使用和不使用cgo进行构建时使用的汇编程序

时间:2016-02-23 20:22:46

标签: gcc assembly go package cgo

假设我有一个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使用一个精确的汇编程序吗?

1 个答案:

答案 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环境变​​量更改,   分别;那些环境变量可能包括命令行   选项。