首页 > 解决方案 > 使用“go build”进行交叉编译时提取目标文件时出现问题

问题描述

我正在尝试创建一个 go.o 目标文件,我将使用外部链接器进行链接。我按照gopher-os程序提取目标文件。

main.go:

package main

func main() {

}

生成文件:

go.o:
    mkdir -p build
    GOARCH=386 GOOS=linux CGO_ENABLED=0 go build -n main.go 2>&1 | sed \
        -e "1s|^|set -e\n|" \
        -e "1s|^|export GOOS=linux\n|" \
        -e "1s|^|export GOARCH=386\n|" \
        -e "1s|^|export CGO_ENABLED=0\n|" \
        -e "1s|^|WORK='build/'\n|" \
        -e "1s|^|alias pack='go tool pack'\n|" \
        -e "/^mv/d" \
        -e "s|-extld|-tmpdir='build/' -linkmode=external -extldflags='-nostdlib' -extld|g" \
        | sh 2>&1 | sed -e "s/^/  | /g"

当我调用时make go.o,我在终端中收到以下消息:

  | loadinternal: cannot find runtime/cgo
  | /usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000008049000

go.o文件确实在目录中创建,但对该build/文件的任何进一步使用都不会导致我的工作进一步取得成功。

我试过设置CGO_ENABLED01似乎没有任何影响。

标签: goosdevgo-build

解决方案


推荐阅读