所以这里的情况是:我需要能够从能够从 SPARC 服务器运行的 Linux 机器(在 Ubuntu 上,它的值(value))编译二进制文件。我要编译的程序非常简单:

#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("Testing the SPARC program...");
    return EXIT_SUCCESS;
}

我已经尝试了许多不同的编译行来让它工作,但不幸的是似乎没有任何工作。

我尝试了传统的:
 clang -target sparc blah.c -o blahsparc

但这不起作用,有一堆汇编程序失败:
 /tmp/blah-519e77.s: Assembler messages:
 /tmp/blah-519e77.s:7: Error: unknown pseudo-op: '.register'
 /tmp/blah-519e77.s:8: Error: unknown pseudo-op: '.register'
 /tmp/blah-519e77.s:9: Error: unknown pseudo-op: '.register'
 /tmp/blah-519e77.s:10: Error: unknown pseudo-op: '.register'
 /tmp/blah-519e77.s:11: Error: no such instruction: 'save %sp,-240,%sp'
 /tmp/blah-519e77.s:12: Error: no such instruction: 'st %g0, [%fp+2043]'
 ...
 clang: error: assembler (via gcc) command failed with exit code 1 (use -v to see invocation)

我也试过这个:
clang -cc1 -triple "sparc-unknown-Linux" blah.c -o blahsparc

它提示缺少标题,所以我没有使用 -cc1,而是使用 -Xclang:
clang -Xclang -triple -Xclang "sparc-unknown-Linux" blah.c -o blahsparc

但是,这也会由于“错误:未知目标 CPU 'x86-64'”而失败。
我不知道从哪里开始。我也尝试过使用 crosstool-ng,但收效甚微。

最佳答案

从 3.4.2 版本(2014 年 6 月)开始,llvm 缺少能够为 sparc 目标生成目标文件所需的代码。较旧的版本(1.x 和 2.x)支持它,但 llvm 用于发出目标文件的框架当时还不太成熟。当前框架推出时,看起来他们并未迁移所有平台。

documentation 似乎暗示 llvm/gcc 的组合已知可以工作,但我认为该表是基于 llvm 的更早版本制成的表格,当时它们具有用于发出目标文件的不太成熟的框架。

r198533 修订版( this thread 讨论提交)中,对发出目标文件的支持已添加到其 SVN 主干中,但正如您在 3.4.2 final release 中所见,在 r198533 中添加的文件和更改不存在。

顺便说一句,clang 目前在 sparc solaris 中不起作用(一般不确定 sparc)。解析器在解析模板时似乎有问题;我得到核心转储等。大约一周前,我遇到了一个 thread,讨论了 sparc/solaris clang 中的对齐问题,这可能是 clang 在此平台上尚不可用的原因之一。

关于c++ - 无法使用 clang 交叉编译到 SPARC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19118854/

10-11 21:53