【发布时间】:2012-02-29 18:31:12
【问题描述】:
我一直在尝试从 Linux 机器为 NetBSD 目标交叉编译 Perl-5.14.2。 使用以下选项成功调用配置脚本,
./Configure -des -Dusecrosscompile
-Dtargetarch=netbsd
-Dosvers=3.0.0
-Dtargethost=10.184.22.48
-Dtargetuser=username
-Dusrinc=.../sb1-mips/usr/include
-Dlibpth=.../xc-sb1-mips/netbsd/Lib/lib
-Dcc=.../mips64-netbsdelf-gcc
配置后,make 不成功。
它从创建 miniperlmain.o 文件开始就在不同的地方中断。
例如生成gv.o文件时出现以下错误:
gv.c: In function `Perl_try_amagic_un':
gv.c:2018: error: void value not ignored as it ought to be
gv.c:2029: error: void value not ignored as it ought to be
gv.c:2029: warning: cast from pointer to integer of different size
gv.c: In function `Perl_try_amagic_bin':
gv.c:2061: error: void value not ignored as it ought to be
gv.c:2063: error: void value not ignored as it ought to be
make: *** [gv.o] Error 1
现在为了摆脱这些错误,我将两个标志,即 -DPERL_IMPLICIT_CONTEXT 和 -DPERL_GCC_BRACE_GROUPS_FORBIDDEN 传递给 C 编译器 CCFLAGS,从而解决了问题。
- 由于它是自定义构建,是否想了解所有必须传递的
CCFLAGS才能成功构建? - 每个标志是什么意思?
- 他们有任何可用的文档吗?
【问题讨论】:
-
交叉编译是 Perl 不太擅长的事情。我建议在 NetBSD 中建立一个构建环境,然后在那里编译它。您的构建环境可以在 VM 中。
-
@Brad Gilbert 是的,交叉编译 Perl 花了我所有的时间,但没有任何成功。由于资源有限,无法为 NetBSD 构建环境。
-
@BradGilbert INSTALL 文档说,Perl 交叉编译构建 miniperl 可执行文件而不是 Perl。但是,我能够为我的体系结构构建 miniperl 二进制文件,但无法将 Perl 模块打包并传输到目标机器。可能是什么问题以及如何转移模块?
-
我实际上对 Perl5 的内部结构并不了解。如果您想进一步讨论此问题,请查看Perl 5 Porters mailing list。
标签: perl cross-compiling perl-module