导航:首页 > 源码编译 > Go静态编译后有多大

Go静态编译后有多大

发布时间:2022-04-02 04:03:25

Ⅰ beego 打包后静态文件怎么处理

你已经用gcc编译出目标文件了,用ar工具打包成.a文件就行了啊,示例:如上图,假设我有test1.c,test2.c两个源文件,先使用gcc-c*.c将源文件编译成目标文件,可以看到,生成了test1.o,test2.o两个目标文件,然后,使用ar命令:arcrvlibtest.a*.o将该目录下的所有目标文件打包生成了libtest.a文件。这样,你在编译的时候就可以直接使用这个静态库了。

Ⅱ go build 和 go install 的区别

你好,go install/build都是用来编译包和其依赖的包的,不同的是,go install一般生成静态库文件放在$GOPATH/pkg目录下,文件扩展名a,如果为main包,则会在$GOPATH/bin 生成一个可执行的二进制文件。go build好像只对main包有效,在当前目录编译生成一个可执行的二进制文件(依赖包生成的静态库文件放在$GOPATH/pkg)。你自己可以先把$GOPATH下的pkg和bin目录清空,试一下不同命令有什么变化。

Ⅲ 为什么go语言编译的程序很大

因为把go的runtime静态链接进去了。

Ⅳ golang会像java一样被反编译吗

和C/C++编译的程序一样,都是机器码,如果你能反编译C的就能反编译Go的。

Ⅳ go build和go install的区别是什么

go build只对main包有效,在当前目录编译生成一个可执行的二进制文件(依赖包生成的静态库文件放在$GOPATH/pkg)。

go install一般生成静态库文件放在$GOPATH/pkg目录下,文件扩展名a,如果为main包,则会在$GOPATH/bin 生成一个可执行的二进制文件。

Ⅵ 现在go可以静态编译一个程序么

第一步:all.bash

% cd $GOROOT/src
% ./all.bash

第一步有些突兀,因为 all.bash 仅仅调用了其它两个 shell 脚本;make.bash 和 run.bash。如果你在使用 Windows 或 Plan 9,过程是一样的,只是脚本扩展名变成了.bat 或.rc。对于本文中的其它脚本,请根据你的系统适当改动。
第二步:make.bash

. ./make.bash --no-banner

main.bash 来源于 all.bash,因此调用退出将正确终止便宜进程。main.bash 有三个主要工作,第一个是验证编译 Go 的环境是否完整。完整性检查在过去几年中建立,它通常尝试避免使用已知的破损工具或必然失败的环境进行编译。
第三步. cmd/dist

gcc -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist cmd/dist/*.c

一旦可用性检查完毕,make.bash 将编译产生 cmd/dist,cmd/dist取代了之前存在于Go 1 之前的Makefile 编译系统。cmd/dist用来管理少量的pkg/runtime的代码生成。cmd/dist 是C语言编写的程序,能够充分利用系统C编译器和头文件来处理大部分主机系统平台的检测。cmd/dist通常用来检测主机的操作系统和体系结构,即环境变量$GOHOSTOS和$GOHOSTARCH .如果是交叉编译的话,变量 $GOOS和$GOARCH可能会由于你的设置而不同。事实上,Go 通常用作跨平台编译器,只不过多数情况下,主机和目标系统一致而已。接下来,make.bash 调用cmd/dist 的引导参数的支持库、 lib9、 libbio 和 libmach,使用编译器套件,然后用自己的编译器进行编译。这些工具也是用 C 语言写的中,但是由系统 C 编译器编译产生。

echo "# Building compilers and Go bootstrap tool for host, $GOHOSTOS/$GOHOSTARCH."
buildall="-a"
if [ "$1" = "--no-clean" ]; then
buildall=""
fi
./cmd/dist/dist bootstrap $buildall -v # builds go_bootstrap

使用的编译器套件 cmd/dist 编译产生一个版本的gotool,go_bootstrap。但go_bootstrap并不是完整得gotool,比方说 pkg/net 就是孤立的,避免了依赖于 cgo。要编译的文件的列表以及它们的依赖项,是由cmd/dist编译的 ,所以十分谨慎地避免引入新的生成依赖项 到 cmd/go。

第四步:go_bootstrap

现在, go_bootstrap 编译完成了,make.bash 的最后一部就是使用 go_bootstrap 完成 Go 标准库的编译,包括整套 gotool 的替换版。

echo "# Building packages and commands for $GOOS/$GOARCH."
"$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" \
-ldflags "$GO_LDFLAGS" -v std

第五步:run.bash

现在,make.bash 完成了,运行回到了 all.bash,它将引用 run.bash。run.bash 的工作是编译和测试标准库,运行时以及语言测试套件。

bash run.bash --no-rebuild

使用 --no-rebuild 标识是因为 make.bash 和 run.bash 可能都调用了 go install -a std,这样可以避免重复,--no-rebuild 跳过了第二个 go install。

# allow all.bash to avoid double-build of everything
rebuild=true
if [ "$1" = "--no-rebuild" ]; then
shift
else
echo '# Building packages and commands.'
time go install -a -v std
echo
fi

第六步:go test -a std

echo '# Testing packages.'
time go test std -short -timeout=$(expr 120 \* $timeout_scale)s
echo

下一步 run.bash z则是对标准库中的所有包进行单元测试,这是使用 testing 包编写的。由于 $GOPATH 和 $GOROOT 中的代码存在于同一个命名空间中,我们不能使用 go test,这可能会测试 $GOPATH 中的所有包,所以将创建别名std来标识标准库中的包。由于有些测试需要很长时间,或耗用大量内存,测试将会通过 -short 标识将其过滤。
第七步 runtime 和 cgo 测试

run.bash的下一节将运行大量对cgo支持的平台测试,运行一些季春测试,编译 Go 附带的一些杂项程序。随着时间的推移,这份杂项程序列表已经变长了,当它们发现自己并不包含在编译过程中时,沉默将不可避免的被打破。

第八步: go run test

(xcd ../test
unset GOMAXPROCS
time go run run.go
) || exit $?

run.bash的倒数第二步调用了$GOROOT目录下test文件夹中的编译器和运行时测试。这其中有描述编译器和运行时本身的低层级测试。而子目录 test/bugs 及 test/fixedbugs 中的测试对已知问题和已解决问题进行特别的测试。所有测试的测试驱动器是 $GOROOT/test/run.go,该程序很小,它调用test文件夹中的每个.go 文件。有些 .go 文件在首行上描述了预期的运行结果,例如,程序失败或是放出特定的输出队列。

第九步go tool api

echo '# Checking API compatibility.'
go tool api -c $GOROOT/api/go1.txt,$GOROOT/api/go1.1.txt \
-next $GOROOT/api/next.txt -except $GOROOT/api/except.txt

run.bash的最后一部将调用API工具,API工具的作用是执行 Go 1 约定;导出的符号,常数,函数,变量,类型和方法组成2012年确认的 Go 1 API。Go 1 写在 api/go1.txt 文件,而 Go 1.1 则写在 api/go1.1.txt文件中。另一个额外的文件,api/next.txt 描述了G 1.1自后添加到标准库和运行时中的符号。当 Go 1.2 发布时,这个文件将会成为 Go 1.2 的约定,另一个新的 next.txt 文件也将被创建。这里还有一个小文件,except.txt,它包括 Go 1 约定中被批准的扩展。对文件的增添总是小心翼翼的。

Ⅶ golang 网站编译后会破解吗

使用原始build编译的大小
6,107KB
通过去除部分连接和调试,build部分参数查看结果。
-a 强制编译所有依赖包。
-s 去掉符号信息
-w 去掉DWARF调试信息,得到的程序就不能用gdb调试了
不建议s和w同时使用。
go build -ldflags -w test.go
但是体积还是有点大
4,633KB
-------我是华丽的分割线---------
不懂可以继续追问
会给你更好地建议,帮助解决可困难,喂网络知道做贡献

Ⅷ 现在go可以静态编译一个程序么

您好,是这样的:
JAVA本身就是表态编译语言, 我想你要找的是JAVA程序的发布 首先JAVA程序运行肯定需要在目标机器上有jre(不是JDK), 如果你想不管目标机上有没有jre程序都能正常运行的话就要在你的发布包里包含jre 发布目录结构举例: App ......bin 包含启动脚。

Ⅸ go build和go install的区别

区别是:
go build指的是去建造。
go install指的是去安装。

例句辨析:
go build
1、They are going go build a new park next year.
明年他们将建一个新公园。
2、Go build things that help you in life& whether interacting with friends, family andorco-workers.

要和朋友、家人或是同事多多交流互动,培养对工作和生活有益的技能。
3、The library is too old. They're going go build a new one.

这个图书管太旧,他们打算建一个新的。
4、Rather than engaging the client to understand the problembeing tackled, we simply "do as we're told," and go build the system.

相对于为客户解决理解被处理的问题,我们简单地“做那些告诉我们的事情”,去构建系统。

go install
1、At this point, please go ahead and install WEKA.
我们继续并安装WEKA。
2、Now that you have created the ear file you can go ahead and install the enterprise application on Application server.

既然您已经创建了ear文件,就可以进一步在应用程序服务器上安装企业应用程序。
3、Now that all of the necessary files have been downloaded, let's go ahead and install them.

所有需要的文件都已下载,接下来安装它们。
4、According to foreign customer's requirement, we will arrange technicians go abroad to install or maintenance the machines.

应客户的要求,我公司可以考虑安排技术人员出国进行培训、维修等。

Ⅹ 为什么go语言的hello world程序编译后有2M那么大

https://segmentfault.com/q/1010000005043461/a-1020000005043860/revision

阅读全文

与Go静态编译后有多大相关的资料

热点内容
12864液晶与单片机的连接 浏览:23
服务器上的bmc是什么 浏览:627
服务器怎么测量网络延迟 浏览:601
打扫卫生解压视频vlog 浏览:271
半封闭活塞制冷压缩机 浏览:397
如何删除存档的文件夹 浏览:833
基于单片机的参考文献 浏览:913
压缩空气管道安全 浏览:768
哪个英语app比较好 浏览:217
进货app怎么样 浏览:517
c语言编译软件免费吗 浏览:250
怎么把appstotre改成中文 浏览:441
html如何连接服务器 浏览:572
linux下如何创建文件 浏览:699
三洋空调压缩机参数 浏览:201
加密猫背后的故事 浏览:253
陕西不听命令 浏览:368
怎么把皮皮虾app表情弄到微信 浏览:291
安卓编译springboot 浏览:397
手机壁纸文件夹背景 浏览:793