`
twt35twt
  • 浏览: 28227 次
社区版块
存档分类
最新评论

gomingw构建记录(仅runtime)

 
阅读更多

gomingw构建记录(仅runtime)
2011年03月07日
  注意,不完整编译,仅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.h tm * 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/Chine se/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