OS: CentOS 7 x86_64
我正在研究从x86_64
到PowerPC32
的C(后来的ADA)交叉编译器。 CentOS 7
已在其默认存储库中建立了交叉编译器,因此通过yum
,我运行了
yum install gcc-powerpc64-linux-gnu.x86_64
尽管这是一个ppc64
编译器,但我可以传递一个标志来强制使用32-bit
模式,因此暂时不用担心。我只想让它即使在64位模式下也可以编译。
我正在尝试编译以下hello world程序:
#include <stdio.h>
int main()
{
printf("Hello, World!");
return 0;
}
当我使用常规gcc
运行它时,它可以编译并运行良好。问题是,在编译时出现上述错误。
这是编译命令的输出
[root@dev cross-compil-tests]# powerpc64-linux-gnu-gcc -o hello hello.c -v
Using built-in specs.
COLLECT_GCC=powerpc64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/powerpc64-linux-gnu/4.8.5/lto-wrapper
Target: powerpc64-linux-gnu
Configured with: ../gcc-4.8.5-20150702/configure --bindir=/usr/bin --build=x86_64-redhat-linux-gnu --datadir=/usr/share --disable-decimal-float --disable-dependency-tracking --disable-gold --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-nls --disable-plugin --disable-shared --disable-silent-rules --disable-sjlj-exceptions --disable-threads --enable-checking= --enable-gnu-unique-object --enable-initfini-array --enable-languages=c,c++ --enable-linker-build-id --enable-nls --enable-obsolete --enable-targets=all --exec-prefix=/usr --host=x86_64-redhat-linux-gnu --includedir=/usr/include --infodir=/usr/share/info --libexecdir=/usr/libexec --localstatedir=/var --mandir=/usr/share/man --prefix=/usr --program-prefix=powerpc64-linux-gnu- --sbindir=/usr/sbin --sharedstatedir=/var/lib --sysconfdir=/etc --target=powerpc64-linux-gnu --with-bugurl=http://bugzilla.redhat.com/bugzilla/ --with-linker-hash-style=gnu --with-newlib --with-sysroot=/usr/powerpc64-linux-gnu/sys-root --with-system-libunwind --with-system-zlib --without-headers --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/cloog-install --with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 --enable-secureplt --with-long-double-128
Thread model: single
gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
COLLECT_GCC_OPTIONS='-o' 'hello' '-v' '-mtune=power6' '-mcpu=power4'
/usr/libexec/gcc/powerpc64-linux-gnu/4.8.5/cc1 -quiet -v -D__unix__ -D__gnu_linux__ -D__linux__ -Dunix -D__unix -Dlinux -D__linux -Asystem=linux -Asystem=unix -Asystem=posix hello.c -msecure-plt -quiet -dumpbase hello.c -mtune=power6 -mcpu=power4 -auxbase hello -version -o /tmp/ccwki2NC.s
GNU C (GCC) version 4.8.5 20150623 (Red Hat 4.8.5-16) (powerpc64-linux-gnu)
compiled by GNU C version 4.8.5 20150623 (Red Hat 4.8.5-11), GMP version 6.0.0, MPFR version 3.1.1, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/powerpc64-linux-gnu/sys-root/usr/local/include"
ignoring nonexistent directory "/usr/lib/gcc/powerpc64-linux-gnu/4.8.5/../../../../powerpc64-linux-gnu/include"
ignoring nonexistent directory "/usr/powerpc64-linux-gnu/sys-root/usr/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/powerpc64-linux-gnu/4.8.5/include
/usr/lib/gcc/powerpc64-linux-gnu/4.8.5/include-fixed
End of search list.
GNU C (GCC) version 4.8.5 20150623 (Red Hat 4.8.5-16) (powerpc64-linux-gnu)
compiled by GNU C version 4.8.5 20150623 (Red Hat 4.8.5-11), GMP version 6.0.0, MPFR version 3.1.1, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 0af58e346ee6cfd1f5beece8a365542e
hello.c:1:19: fatal error: stdio.h: No such file or directory
#include <stdio.h>
^
compilation terminated.
这些行对我来说很有趣
[...]
ignoring nonexistent directory "/usr/powerpc64-linux-gnu/sys-root/usr/local/include"
ignoring nonexistent directory "/usr/lib/gcc/powerpc64-linux-gnu/4.8.5/../../../../powerpc64-linux-gnu/include"
ignoring nonexistent directory "/usr/powerpc64-linux-gnu/sys-root/usr/include"
[...]
hello.c:1:19: fatal error: stdio.h: No such file or directory
#include <stdio.h>
忽略不存在的目录条目可能是问题所在。我不知道如何解决它,并且已经多次删除/重新安装了交叉编译器。我也找不到可下载的交叉编译器的C库,因此可以使用-I
标志手动链接它。
尝试的解决方案
我做了一个:
find stdio.h | grep stdio.h
,并使用-I
链接到我找到它的目录。新错误,找不到stubs-32.h
...好吧,通过更多的谷歌搜索(简单的yum安装)解决了这个问题,然后我没找到crt1.o
...等等。令人沮丧,但我相信反正不是正确的方向。
这是我的计算机上找到的
[root@lxdev-gab gnu]# find "stdio.h" / | grep "stdio.h"
find: ‘stdio.h’: No such file or directory
/usr/include/bits/stdio.h
/usr/include/stdio.h
/usr/include/c++/4.8.2/tr1/stdio.h
/usr/share/man/man0p/stdio.h.0p.gz
有什么建议吗?