如何交叉编译solaris 32位

psp*_*ago 2 gcc solaris cross-compiling go

我们目前正在为包括 Solaris 64 位在内的多个平台构建 Go 可执行文件。我们也有 32 位 Solaris 可执行版本的请求,但我无法让它工作(设置 Solaris 64 位交叉编译器的人已经消失并且无法联系)。

我尝试使用现有的 Solaris 交叉编译在go build上设置 -m32 标志,但这不起作用,因此我尝试构建 Solaris 32 位特定的交叉编译器。

我用谷歌搜索并发现了一些模糊的例子,所以我遵循这个过程:

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

$TARGET=sparc-sun-solaris2.10

$SYSROOT= /path/to/solaris32/includes

$PREFIX= /路径/到/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
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个指向 gogcc 的符号链接并将 GCC 放在路径上
  2. 编译一个简单的测试程序,如下所示:

    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

失败如下:

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

命令行参数

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

显然我不知道自己在做什么。有人能指出我正确的方向吗?

mae*_*ics 5

根据支持的 OS/arch 目标列表,Solaris 32 位似乎不受支持

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

$GOOS     $GOARCH
...
solaris   amd64
...
Run Code Online (Sandbox Code Playgroud)

也就是说,Solaris 64 位被明确列为受支持的平台,但 Solaris 32 位却被明确列为受支持的平台。列出

因此,有充分的理由相信 go 程序无法Solaris 32 位系统上可靠地运行,并且您可能不应该同意支持该平台(如果您确实使交叉编译工作正常),主要是因为 go 团队本身不支持!

  • 正确,Solaris 10 仅包含 SPARC 的 64 位内核,而不是 32 位。(Solaris 10 仍然包含适用于 x86 的 32 位内核以及当时新的 64 位 x86 内核,Solaris 11 放弃了 32 位 x86 内核,也仅支持 64 位。) (2认同)