Go 如何交叉编译solaris 32位

Go 如何交叉编译solaris 32位,go,gcc,cross-compiling,solaris,Go,Gcc,Cross Compiling,Solaris,我们目前正在为包括Solaris 64位在内的多个平台构建Go可执行文件。我们还要求提供32位Solaris可执行版本,但我无法使其正常工作(安装Solaris 64位交叉编译器的人已经离开,无法联系到) 我尝试使用现有的solaris交叉编译在go build上设置-m32标志,但没有成功,因此我尝试构建一个solaris 32位特定的交叉编译器 我在谷歌上搜索了一些模糊的例子,因此我遵循以下流程: 将标题和库从32位Solaris计算机复制到我的Linux构建计算机 D/L和build bi

我们目前正在为包括Solaris 64位在内的多个平台构建Go可执行文件。我们还要求提供32位Solaris可执行版本,但我无法使其正常工作(安装Solaris 64位交叉编译器的人已经离开,无法联系到)

我尝试使用现有的solaris交叉编译在go build上设置-m32标志,但没有成功,因此我尝试构建一个solaris 32位特定的交叉编译器

我在谷歌上搜索了一些模糊的例子,因此我遵循以下流程:

  • 将标题和库从32位Solaris计算机复制到我的Linux构建计算机
  • D/L和build binutils和gcc,将SYSROOT指向下载的32位Solaris标头和库,其中:
  • $TARGET=sparc-sun-solaris2.10

    $SYSROOT=/path/to/solaris32/includes

    $PREFIX=/path/to/gcc输出

    binutils-2.31/configure-target=$target--prefix=$prefix-with sysroot=$sysroot-v

    gcc-8.2.0/configure --target=$TARGET --with-gnu-as --with-gnu-ld  --prefix=$PREFIX -with-sysroot=$SYSROOT --disable-libgcj --enable-languages=c,c++,go -v
    
  • 创建指向gogcc的符号链接,并将GCC放在路径上
  • 编译一个简单的test go程序,如下所示:

    go build--compiler gccgo--gccgoflogs“-m32-O3-static libgo-Wl,-dy-lnsl-lsocket-lrt-lsendfile”-o${GOTOOLS}/${BINARIES}/${PROJECT\u NAME}/test/solaris\u sparc32 test/main.go

  • 这失败的原因如下:

    go build:使用gccgo工具链时,请使用-gccgoflags而不是-gcflags传递编译器标志

    命令行参数

    gccgo:错误:不能同时使用-m32和-m64


    很明显,我不知道我在做什么。有人能给我指出正确的方向吗?

    Solaris 32位似乎不受支持,根据:

    $GOOS和$GOARCH的有效组合为:

    $GOOS     $GOARCH
    ...
    solaris   amd64
    ...
    
    也就是说,Solaris 64位被明确列为受支持的平台,但Solaris 32位未被列为受支持的平台


    因此,有充分的理由相信go程序不会在Solaris 32位系统上可靠运行,您可能不应该同意支持该平台(如果您碰巧能够实现交叉编译),主要是因为go团队本身不支持它

    64位Solaris仍然可以运行32位可执行文件。事实上,许多(如果不是大多数的话)系统实用程序,如
    mv
    cp
    在64位安装上仍然是32位的。我的观点是,官方go文档明确包括solaris/64,但不包括solaris/32。鉴于OP发布的错误消息,还没有达到这一点。尽管我承认我不知道为什么32位Solaris构建是必要的,因为它的平台是Solaris 10。Solaris 10始终支持64位,到目前为止,32位硬件还没有听说过。我刚刚注意到目标是SPARC。我几乎可以肯定Solaris10甚至不能在32位SPARC CPU上运行。没错,Solaris10只包含一个64位SPARC内核,而不是32位。(Solaris 10在当时新推出的64位x86内核的同时,还包括一个用于x86的32位内核,Solaris 11放弃了32位x86内核,改为仅64位。)如果您收到
    gccgo:error:may不能同时使用-m32和-m64
    作为错误消息,我怀疑您仍然从某个地方获得了作为命令行参数的
    -m64
    。似乎
    go build
    命令中包含了
    -m64
    标志,因为go只支持Solaris上的这种体系结构。@maerics考虑到这一点,我正处于这样一个地步,我想知道这个客户请求背后的原因。如果发布的目标必须是64位的Solaris 10 SPARC,那么请求的原因可能很有趣。如果该
    -m64
    来自某个地方的
    go build
    命令,那么试图覆盖它实际上是在进行不受支持的黑客攻击。如果强制的话,它应该可以工作,并且源代码是干净的和可移植的——考虑到支持的平台太多,这很有可能——但是仍然有可能出现严重的bug。我不想因为支持这一点而上当受骗。@AndrewHenle-heh,有趣的是=P