开发者

Golang交叉编译之跨平台编译使用详解

开发者 https://www.devze.com 2022-12-03 14:01 出处:网络 作者: 微客鸟窝
目录在CMD命令行中编译设置linux编译环境PowerShell命令行中一、CGO_ENABLED二、GOOS三、GOARCH四、GOHOSTOS五、GOHOSTARCH六、go build后台运行1.nohup2. &3. Windows上curl 命令测试在CMD命令行中编译
目录
  • 在CMD命令行中编译
    • 设置linux编译环境
  • PowerShell命令行中
    • 一、CGO_ENABLED
    • 二、GOOS
    • 三、GOARCH
    • 四、GOHOSTOS
    • 五、GOHOSTARCH
    • 六、go build
  • 后台运行
    • 1.nohup
    • 2. &
    • 3. Windows上
  • curl 命令测试

    在CMD命令行中编译

    设置Linux编译环境

    SET CGO_ENABLED=0
    set GOARCH=amd64
    set GOOS=linux
    //CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7
    // 开始编译
    go build -o ./build/ ./main.g编程客栈o
    在wind开发者_JAV培训ows10之前的系统版本上使用cmd命令行可以使用上述命令编译
    

    powershell命令行中

    在powershell命令行中编译(示例编译64位linux程序)

    // 设置Linux编译环境
    $env:CGO_ENABLED="0"
    $env:GOOS="linux"
    $env:GOARCH="amd64"
    // 开始编译
    go build -o ./build/ ./main.go
    

    一、CGO_ENABLED

    作用:

    用于标识(声明) cgo 工具是否可用

    意义:

    存在交叉编译的情况时,cgo 工具是不可用的。在标准 go 命令的上下文环境中,交叉编译意味着程序构建环境的目标计算架构的标识与程序运行环境的目标计算架构的标识不同,或者程序构建环境的目标操作系统的标识与程序运行环境的目标操作系统的标识不同

    关闭 cgo 后,在构建过程中会忽略 cgo 并静态链接所有的依赖库,而开启 cgo 后,方式将转为动态链接

    二、GOOS

    用于标识(声明)程序构建环境的目标操作系统

    如:linux 、windows

    三、GOARCH

    用于标识(声明)程序构建环境的目标计算架构,若不设置,默认值与程序运行环境的目标计算架构一致

    系统GOOSGOARCH
    Windows 32 位windows386
    Windows 64 位windowsamd64
    OS X 32 位darwin386
    OS X 64 位darwinamd64
    Linux 32 位linux386
    Linux 64 位linuxamd64

    四、GOHOSTOS

    用于标识(声明)程序运行环境的目标操作系统

    五、GOHOSTARCH

    用于标识(声明)程序运行环境的目标计算架构

    六、go build

    • -a 强制重新编译,简单来说,就是不利用缓存或已编译好的部分文件,直接所有包都是最新的代码重新编译和关联
    • -installsuffix
    • 作用:在软件包安装的目录中增加后缀标识,以保持输出与默认版本分开
    • 补充:如果使用 -race 标识,则后缀就会默认设置为 -race 标识,用于区别 race 和普通的版本
    • -o 指定编译后的可执行文件名称

    后台运行

    //修改权限命令
    chmod 777 程序名称
    //后台运行的命令
    nohup ./程序名 & 
    //不输出错误信息
    nohup ./程序名 >/dev/null 2>&1 &
    //如果要关闭程序,可以使用命令”ps” 查看后台程序的pid,然后使用“kill 程序pid”命令,关闭程序比如程序名为test,可以用如下命令查询
    ps aux|grep test
    //关掉进程
    kill 进程编号
    //开机启动glang
    vi /etc/rc.local
    cd gopath
    nohup ./main &
    

    1.nohup

    用途:不挂断地运行命令。

    语法:no编程hup Command [ Arg … ] [ & ]

    • 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
    • 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
    • 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

    退出状态:该命令返回下列出口值:   

    • 126 可以查找但不能调用 Command 参数指定的命令。   
    • 127 编程nohup 命令发生错误或不能查找由 Command 参数指定的命令。   
    • 否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

    2. &

    用途:在后台运行

    一般两个一起用

    nohup command &

    nohup Redis-server ./main >/dev/null 2>&1 &
    

    查看运行的后台进程

    (1)jobs -l

    (2)ps -ef

    ps -aux|grep test.js
    
    • a: 显示所有程序
    • u: 以用户为主的格式来显示
    • x: 显示所有程序,不以终端机来区分

    3. windows上

    windows 上面用

    go build -ldflags "-s -w -H=windowsgui"
    • -s 省略符号表和调试信息
    • -w Omit the dwARF symbol table 省略DWARF符号表
    • -H windowsgui 不打印信息到console (On Windows, -H winandroiddowsgui writes a "GUI binary" instead of a "console binary."),就不会有cmd窗口了

    curl 命令测试

    curl发送参数名字username 和pwd 是页面定义的两个参数名字,form1 是页面定义的表单的名字。

    curl  -d "username=test&pwd=123456"  httphttp://www.devze.com://serverIP/webAuth/index.htm/form1

    以上就是golang交叉编译之跨平台编译使用详解的详细内容,更多关于Golang 跨平台交叉编译的资料请关注我们其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号