如何交叉编译Solaris 32位

时间:2018-10-02 21:09:37

标签: go gcc cross-compiling solaris

我们目前正在为包括Solaris 64位在内的多个平台构建Go可执行文件。我们也需要32位Solaris可执行版本,但我无法使它正常工作(安装Solaris 64位交叉编译器的人已经离开并且无法访问)。

我尝试使用现有的solaris交叉编译在 go build 上设置-m32标志,但这没有用,所以我试图构建Solaris 32位特定的交叉编译器。

我在Google上搜索并找到了一些模糊的示例,因此我正在遵循以下过程:

  1. 将标头和库从32位Solaris计算机复制到我的Linux构建计算机。
  2. D / L并构建binutils和gcc,将SYSROOT指向下载的32位Solaris标头和库,

$ TARGET = sparc-sun-solaris2.10

$ SYSROOT = / path / to / solaris32 / includes

$ PREFIX = / path / to / gcc-output

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
  1. 创建一个指向gogcc的符号链接,并将GCC放在路径上
  2. 像这样编译一个普通的测试go程序:

    go build --compiler gccgo --gccgoflags "-m32 -O3 -static-libgo -Wl,-dy -lnsl -lsocket -lrt -lsendfile" -o ${GOTOOLS}/${BINARIES}/${PROJECT_NAME}/test/solaris_sparc32 test/main.go

此操作失败,如下所示:

开始构建:使用gccgo工具链时,请使用-gccgoflags而不是-gcflags传递编译器标志

命令行参数

gccgo:错误:可能无法同时使用-m32和-m64

很明显,我不知道自己在做什么。谁能指出我正确的方向?

1 个答案:

答案 0 :(得分:4)

根据the list of supported OS/arch targets,似乎不支持Solaris 32位:

  

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

$GOOS     $GOARCH
...
solaris   amd64
...

即,将Solaris 64位明确列出为受支持的平台,但未列出Solaris 32位。

因此,我们有充分的理由相信go程序不会在Solaris 32位系统上可靠运行,并且您可能不应该同意支持该平台(如果碰巧获得了该平台)交叉编译工作)主要是因为go团队本身不支持!