我们目前正在为包括Solaris 64位在内的多个平台构建Go可执行文件。我们也需要32位Solaris可执行版本,但我无法使它正常工作(安装Solaris 64位交叉编译器的人已经离开并且无法访问)。
我尝试使用现有的solaris交叉编译在 go build 上设置-m32标志,但这没有用,所以我试图构建Solaris 32位特定的交叉编译器。
我在Google上搜索并找到了一些模糊的示例,因此我正在遵循以下过程:
$ 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
像这样编译一个普通的测试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
很明显,我不知道自己在做什么。谁能指出我正确的方向?
答案 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团队本身不支持!