`

gomingw构建记录(仅runtime)

阅读更多

 

注意,不完整编译,仅8g、8l和runtime.a

 

1. gomingw

Go MinGW Builds

Win32 (experimental) build of release 2011-03-07.1

http://code.google.com/p/gomingw/

 

2. MSYS | MinGW

MinGW - Minimalist GNU for Windows

* gcc version 3.4.5 (mingw-vista special r3)

* GNU Make 3.81

http://sourceforge.net/projects/mingw/

或者用这个(未测试)

https://bitbucket.org/jpoirier/go_mingw/downloads

 

3. 编译的额外工具

a. 需要以下工具和库(注意,依赖于mingw的运行时dll,故需要msys/mingw才可运行)

* Ed - A line-oriented text editor

(ed.exe,依赖于Regex)

http://gnuwin32.sourceforge.net/packages/ed.htm

http://www.gnu.org/software/ed/ed.html

* LibIntl for Windows

(libintl3.dll)

http://gnuwin32.sourceforge.net/packages/libintl.htm

* Regex for Windows

(regex2.dll)

http://gnuwin32.sourceforge.net/packages/regex.htm

* Bison for Windows

(bison.exe,依赖于Regex和Libintl)

http://gnuwin32.sourceforge.net/packages/bison.htm

* The AWK Programming Language

(awk.exe)

http://cm.bell-labs.com/cm/cs/awkbook/index.html

--------------------

b. 二进制可以在下面的链接中找到,不需要自己编译:

* ed.exe和regex2.dll在gowin-env中。

https://bitbucket.org/akavel/gowin-env/downloads

或者在GnuWin32中安装。

http://gnuwin32.sourceforge.net/packages.html

--------------------

c. 注意事项:

* 必须复制bison的二进制安装包里的share目录(一些.m4文件)

* 把msys/mingw自带的awk去掉或重命名,使用awk.exe代替原有的awk文件

--------------------

d. 用到的工具合计有(不包括一些依赖库的dll)

gcc version 3.4.5 (mingw-vista special r3)

GNU Make 3.81

GNU Ed 1.2

bison (GNU Bison) 2.4.1

awk version 20070501

 

4. 解压gomingw源码包

把gomingw的下载包解压到/home/Administrator目录下

目录名为/home/Administrator/go

删除/home/Administrator/go/bin下的所有.exe文件。

只保留quietgcc文件。

删除/home/Administrator/go/lib下的所有.a文件。

删除/home/Administrator/go/pkg/windows_386下的所有库文件。

 

5. 编译gomingw公共库

包括三个.a文件:

lib9.a

libbio.a

libmach.a

执行命令如下:

$ cd

$ cd go/src/lib9/

$ make

出现错误:

../Make.inc:18: *** $GOROOT is not set; use gomake or set $GOROOT in your environment.  Stop.

设置环境变量PATH和GOROOT(注意MinGW的环境变量区分大小写):

$ export GOROOT=/home/Administrator/go

$ export PATH=/home/Administrator/go/bin:$PATH

$ make

注意make可以重复使用,自动跳过之前已经完成的目标。

完成后,生成lib9.a

用类似的办法编译libbio.a和libmach.a

$ cd ../libbio

$ make

$ cd ../libmach

$ make

然后把生成的

lib9.a

libbio.a

libmach.a

复制到/home/Administrator/go/lib下

 

6. 编译gomingw编译器工具、库和runtime库

关于8g以及其它exe的作用和使用方法见这里

http://golang-china.googlecode.com/svn/trunk/Chinese/golang.org/index.html

http://code.google.com/p/golang-china/

和x86相关的重要可执行文件和库有

* gc.a

* 8g.exe

* 8l.exe(依赖于gc.a)

另外,由于runtime.a这个go库一般都会使用到,

所以还需要以下工具的帮助。

* cc.a

* 8c.exe(依赖于cc.a)

* gopack.exe

* 8a.exe

* runtime.a(依赖于cc.a,8a.exe和gopack.exe)

执行以下命令:(同样需要设置GOROOT和PATH,同上)

$ cd

$ cd go/src/cmd/gc

$ make

(如果失败,请检查awk.exe是否存在,原有awk是否重命名,

然后用make clean all重新编译)

$ cd ../8g

$ make

$ cd ../8l

$ make

$ cd ../cc

$ make

$ cd ../8c

$ make

$ cd ../gopack

$ make

$ cd ../8a

$ make

然后把编译好的8g.exe, 8l.exe, 8c.exe, 8a.exe, gopack.exe

全部复制到/home/Administrator/go/bin下,继续下面的runtime.a编译

$ cd ../../pkg/runtime/

$ make

输出文件runtime.a在_obj目录下,复制到

/home/Administrator/go/pkg/windows_386目录下

(此时目录中只有一个.a文件)

 

7. 最简单的测试

测试最简单的go程序

$ cd 

$ cd go/test

$ 8g -h

gc: usage: 8g [flags] file.go...

flags:

 -I DIR search for packages in DIR

 -d print declarations

 -e no limit on number of errors printed

 -f print stack frame structure

 -h panic on an error

 -o file specify output file

 -S print the assembly language

 -V print the compiler version

 -u disable package unsafe

 -w print the parse tree after typing

 -x print lex tokens

$ 8g helloworld.go

$ ls helloworld.*

helloworld.8  helloworld.go

$ 8l -h

usage: 8l [-options] [-E entry] [-H head] [-I interpreter] [-L dir] [-T text] [-R rnd] [-r path] [-o out] main.8

$ 8l helloworld.8

$ ls *.exe

8.out.exe

$ ./8.out.exe

hello, world

注意,这里使用8g和8l可以正确地找到库(因为前面编译的时候已经设置好),

但实际操作(脱离MinGW环境)需要重新设置环境变量指向新的路径,见

http://code.google.com/p/golang-china/wiki/Install

生成的8.out.exe是原生的Windows可执行程序,仅导入KERNEL32.DLL,

所以可以独立于MinGW和Go的环境运行。

 

8. 一些问题

* 如果make没有响应,直接结束进程然后重新运行make。

 

 

(待补充)

 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics