如何在嵌入式系统上安装缺失的Perl模块?

4

我在一个嵌入式系统上运行Linux,具体来说是在Cyclone V FPGA上运行的Yocto Linux。我能够使用Perl的基本形式,但无法加载任何Perl模块。例如,当尝试使用GetOpt::Long模块时,会出现以下错误:

root@socfpga_cyclone5:/mnt/sdcard# ./test.pl
Can't locate Getopt/Long.pm in @INC (@INC contains:
  /etc/perl
  /usr/lib/perl/site_perl/5.14.2/
  /usr/lib/perl/site_perl/5.14.2
  /usr/lib/perl/vendor_perl/5.14.2/
  /usr/lib/perl/vendor_perl/5.14.2
  /usr/lib/perl/5.14.2/
  /usr/lib/perl/5.14.2
  /usr/local/lib/site_perl
  /usr/lib/perl/5.14.2
  .) at ./test.pl line 3.
BEGIN failed--compilation aborted at ./test.pl line 3.

有人知道我应该如何安装这些模块吗?这些模块是否会受到硬件架构的影响?只需从某个来源复制和粘贴.pm文件,这合理吗(在哪里可以找到并下载这些.pm文件)?


你对于正常安装模块的方法有什么问题? - ikegami
安装模块的正常方法是什么? - muffle
通常使用其安装程序,通过 cpan - ikegami
2
通常的系统对于嵌入式设备来说并不是很好。它往往速度较慢,占用空间较大,并且会拉取一些你可能不需要的东西。 - Kent Fredric
2个回答

13

我知道你的问题已经超过两年了,但这是一个好问题,我很遗憾没有人回答。

Perl生态系统非常庞大,完整的Perl安装占用磁盘空间太大,在嵌入式系统上是个问题。因此,当您添加perl到您的镜像时,只会安装最小系统。其他的Perl模块可以作为bitbake包使用。

大多数情况下,您可以从配方中找出它提供哪些包,但Perl配方非常复杂。查找由Perl配方构建的软件包最简单的方法是构建它(bitbake perl),然后查看packages-split目录,您将在bitbake工作目录中找到它。对于我的系统(Cortex A8),它看起来像这样:

$ ls -1 /poky/build/tmp/work/cortexa8hf-vfp-neon-poky-linux-gnueabi/perl/5.20.0-r1/packages-split
perl
perl-dbg
perl-dev
perl-doc
perl-lib
perl-lib.shlibdeps
perl-misc
perl-misc.shlibdeps
perl-module-anydbm-file
perl-module-app-cpan
perl-module-app-prove
perl-module-app-prove-state
(...)

如果您需要的模块已经列出,只需像这样将其添加到IMAGE_INSTALL中:
IMAGE_INSTALL += "\
    perl \
    perl-module-base \
    perl-module-bytes \
    perl-module-data-dumper \
    perl-module-digest-md5 \
    perl-module-file-spec \
    perl-module-file-spec-functions \
    perl-module-findbin \
    perl-module-getopt-long \
    (...)"

如果您需要一个尚未构建的模块,您需要使用类为其创建自己的配方。请参阅和中的示例。
编辑意见,我对在嵌入式系统上使用perl并不是很满意。最大的问题是将依赖项解析推迟到运行时。这太容易出错了,最终会出现Can't locate foobar.pm in @INC错误。

0

看一下这个帖子:https://lists.yoctoproject.org/pipermail/yocto/2013-July/015198.html

听起来像是perl模块已经被打包到其他需要的东西中,但有人正在努力使它们可以单独使用。

有些模块只需复制即可安装;其他模块则需要编译器或其他构建步骤。最好使用yocto项目提供的任何工具。


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