如何从cgo获取exe文件

huangapple go评论108阅读模式
英文:

How to get from cgo to exe

问题

从一个基本的测试程序开始...

package main

/*
#include <stdio.h>
static void test() {
        printf("hello world");
}
*/
import "C"

func main() {
        C.test();
}

我执行 "cgo hello_cgo.go" 并得到以下结果:

_cgo_.o
_cgo_defun.c
_cgo_gotypes.go 
hello_cgo.cgo1.go 
hello_cgo.cgo2.c

从这里开始如何编译成可执行文件?

英文:

From a basic test program. . .

package main

/*
#include &lt;stdio.h&gt;
static void test() {
        printf(&quot;hello world&quot;);
}
*/
import &quot;C&quot;

func main() {
        C.test();
}

I do "cgo hello_cgo.go" and get:

_cgo_.o
_cgo_defun.c
_cgo_gotypes.go 
hello_cgo.cgo1.go 
hello_cgo.cgo2.c

How do I go about compiling from here to an exe?

答案1

得分: 6

尝试使用Go的makefile。创建一个类似的makefile:

# Makefile
CGOFILES=test.go
TARG=test

include $(GOROOT)/src/Make.$(GOARCH)
include $(GOROOT)/src/Make.pkg

运行make命令将会生成文件_obj/test.a,然后你需要使用6l或类似的工具进行链接。

英文:

Try using the go makefiles. Create a makefile like

# Makefile
CGOFILES=test.go
TARG=test

include $(GOROOT)/src/Make.$(GOARCH)
include $(GOROOT)/src/Make.pkg

Running make will then produce the file _obj/test.a, which you'll have to link with 6l or similar.

答案2

得分: 2

更新go1版本:

$ cat foo.go
package main

// #include <stdio.h>
// static void test() { printf("Hello, world\n"); }
import "C"

func main() {
    C.test()
}
$ go build foo.go
$  ./foo
你好,世界
英文:

Update for go1:

$ cat foo.go
package main

// #include &lt;stdio.h&gt;
// static void test() { printf(&quot;Hello, world\n&quot;); }
import &quot;C&quot;

func main() {
    C.test()
}
$ go build foo.go
$  ./foo
Hello, world

huangapple
  • 本文由 发表于 2010年5月7日 09:51:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/2785696.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定