使用cgo和不使用cgo进行编译时,golang使用的汇编程序

假设我有一个golang软件包,其中包含一些汇编代码:</ p>

  demopkg / 
source1.go
source2.go
asm_amd64.s
</ code> </ pre>

如果我尝试使用 go build进行构建 </ code>,工具链将使用 go工具asm </ code>来组装* .s文件。</ p>

但是,如果我将Cgo添加到混合物中,只需放置一个 导入“ C” </ code>到任何源中,转到将切换到gcc汇编器。</ p>

我可以通过执行 go build -n </ 代码>。 从第一种情况到 / usr / local / go / pkg / tool / linux_amd64 / asm </ code>的调用被替换为 gcc </ code>的调用。 除此之外,它还会开始抱怨语法损坏。</ p>

此行为是否已记录在案,因此我可以依靠它来维护我的软件包? 我可以强制 go build </ code>使用一个确切的汇编程序吗?</ p>
</ div>

展开原文

原文

Let's say I have a golang package, which contains some assembly code:

 demopkg/
   source1.go
   source2.go
   asm_amd64.s

If I try to build it using go build, toolchain will use go tool asm to assemble the *.s files.

But if I add Cgo to the mixture, by putting a single import "C" into any of the sources, go will switch to gcc assembler.

I can see it by executing go build -n. Calls to the /usr/local/go/pkg/tool/linux_amd64/asm from the first case get replaced by calls to gcc. Besides that, it starts complaining about broken syntax.

Is this behaviour documented, so I can rely on it for the maintaining of my package? Can I force go build to use one exact assembler?

1个回答



是的,它在 cgo文档 </ p>


当Go工具发现一个或多个Go文件使用特殊的导入
“ C”时,它将查找其他非 -目录中的Go文件,并将其编译为Go软件包的一部分。 任何.c,.s或.S文件都将使用C编译器进行编译。 任何.cc,.cpp或.cxx文件都将使用C ++编译器进行编译。 任何.h,.hh,.hpp或.hxx文件都不会单独编译,但如果更改了这些头文件,则会重新编译C和C ++文件。 默认的C和C ++
编译器可以分别由CC和CXX环境变​​量更改。 这些环境变量可能包含命令行
选项。</ p>
</ blockquote>
</ div>

展开原文

原文

Yes, it's in the cgo documentation

When the Go tool sees that one or more Go files use the special import "C", it will look for other non-Go files in the directory and compile them as part of the Go package. Any .c, .s, or .S files will be compiled with the C compiler. Any .cc, .cpp, or .cxx files will be compiled with the C++ compiler. Any .h, .hh, .hpp, or .hxx files will not be compiled separately, but, if these header files are changed, the C and C++ files will be recompiled. The default C and C++ compilers may be changed by the CC and CXX environment variables, respectively; those environment variables may include command line options.

duanhuchang5056
duanhuchang5056 哇,我看过这个页面很多次了,但是我从未注意到有关.s文件的部分。 我想避免此功能的唯一方法是拆分软件包...
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问