如何为PowerPC编译“Hello World”程序

7

我有一个Dreambox 500,维基百科上说它有一个PCP处理器,这是PowerPC处理器:

$ cat /proc/cpuinfo
processor: 0
cpu: STBx25xx
clock: 252MHz
Review: 9.80 (pvr 5151 0950)
bogomips: 250.36
Machine: Dream Multimedia Dreambox TV
plb bus clock: 63MHz

我通常会安装GCC,但是它的存储空间很小,我需要编译一个程序。

我听说GCC可以编译PowerPC,但我尝试过没有成功。

例如这段代码:

#include <stdio.h>

int main()
{
    printf("Hello World!\n");

    return 0;
}

我使用这个来编译。
gcc example.c -mtune=powerpc

但它会报错。
example.c:1:0 error: bad value (powerpc) for -mtune- switch
#include <stdio.h>
^

谢谢!

2个回答

7
您应该使用交叉编译器,因为您的目标架构与主机架构不同。主机是您系统的架构(通常是amd64(x86_64)或i386(x86_32))。而目标架构是您编译的程序将在其上运行的架构(在您的情况下是powerpc)。
许多GNU/Linux发行版提供交叉编译器作为单独的软件包。例如,对于Ubuntu,这些软件包可用:
sudo apt-get install gcc-4.8-powerpc-linux-gnu g++-4.8-powerpc-linux-gnu binutils-4.8-powerpc-linux-gnu

以上的软件包适用于trusty。在后续的版本中,会有不同的GCC版本可用。
然后,您可以使用powerpc-linux-gnu-gcc-4.8编译您的程序。或者您可以设置环境变量CCCXXpowerpc-linux-gnu-gcc-4.8powerpc-linux-gnu-g++-4.8
更新: 我在这里找到了Dreambox 500的交叉编译工具链,链接地址为这里,但它包含相对较旧的GCC(3.4)。
为了使用它,请将下载的文件提取到/opt/cross/dm500,通过export PATH=$PATH:/opt/cross/dm500/cdk/bin/opt/cross/dm500/cdk/bin添加到路径中,并使用适当前缀的gcc

编译器暂时没有给我错误提示,我打算在我的dm500上进行测试。 - Iamk Denok
当我运行它时,它会报告“分段错误”。 :( - Iamk Denok
运行 ldd a.out(或者你编译的程序的名称)并将其输出在此处。 - nightuser
它说“不是动态可执行文件”。 - Iamk Denok
实际上,你可以尝试使用“-static-libgcc”标志进行编译。 - nightuser
显示剩余6条评论

1

在一个编程论坛上一段时间后,我找到了一个有着同样问题的人。经过一段时间的尝试,他找到了解决方法,我也试了一下,结果有效。

我需要做的事情是:

powerpc-gcc someprog.c -static

我不知道-static是什么,但它会增加可执行文件的大小,最终确实有效!

5
据我所知,静态标志会将您的二进制文件编译为一个巨型可执行文件,不需要运行时库依赖。 - Morten Jensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接