如何交叉编译Synology DS218+;的Perl模块(此处:Device::SerialPort);?

如何交叉编译Synology DS218+;的Perl模块(此处:Device::SerialPort);?,perl,cross-compiling,perl-module,synology,Perl,Cross Compiling,Perl Module,Synology,我正在尝试为我的Synology Diskstation DS218+构建一个Perl模块(Device::SerialPort),它运行在Intel Celeron J3355(Apollolake)处理器上。我设法通过运行在同一台机器上的Docker映像中的spksrc Synology工具链为Synology构建了更复杂的包,例如“make”,但使用Perl模块却未能做到这一点。 我曾尝试为DS218+使用perlbrew运行的相同Perl版本(目前为5.24.0)构建它们,并将生成的文件

我正在尝试为我的Synology Diskstation DS218+构建一个Perl模块(Device::SerialPort),它运行在Intel Celeron J3355(Apollolake)处理器上。我设法通过运行在同一台机器上的Docker映像中的spksrc Synology工具链为Synology构建了更复杂的包,例如“make”,但使用Perl模块却未能做到这一点。 我曾尝试为DS218+使用perlbrew运行的相同Perl版本(目前为5.24.0)构建它们,并将生成的文件复制过来,但我能得到的最好结果是出现了一个错误,如“未定义的符号:PL_stack_sp at/usr/local/share/perl5/core_Perl/XSLoader.pm”

编辑:以下是目标系统上perl-V的输出:

[user@DS218 ~]$ perl -V
Summary of my perl5 (revision 5 version 24 subversion 0) configuration:
Derived from: fa04148f1272140cc97a02f4fca347a6540dc6b5
Platform:
osname=linux, osvers=current, archname=x86_64-linux
Compiler:
Linker and Libraries:
Dynamic Linking:
Characteristics of this binary (from libperl): 
Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS
                    PERL_COPY_ON_WRITE PERL_DONT_CREATE_GVSV
                    PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
                    PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
                    PERL_PRESERVE_IVUV USE_64_BIT_ALL USE_ITHREADS
                    USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
                    USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_LOCALE_TIME
                    USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API
Locally applied patches:
uncommitted-changes
Built under linux
Compiled at Jan 21 2019 19:42:02
@INC:
/usr/local/lib/perl5/site_perl
/usr/local/share/perl5/site_perl
/usr/local/lib/perl5/vendor_perl
/usr/local/share/perl5/vendor_perl
/usr/local/lib/perl5/core_perl
/usr/local/share/perl5/core_perl
我知道我可以安装第三方软件包管理器,比如IPGK,但我不想增加开销(加上喜欢学习;)。如果有人能指点我,我会接受一个在DS218+上实际工作的预编译二进制文件

(对于那些不太了解DS218+的人来说:CPAN不是一个选项,因为C编译器没有附带概要,使用工具链交叉编译gcc也同样令人沮丧)


提前感谢您的指点

要改进复制环境,请在目标系统上运行
perl-V
,查看它是如何配置的。相关项目,可能更多:

cccdlflags
ccdlflags
ccflags
ccversion
config_args
gccversion
gnulibc_version
lddlflags
libc
libs

目标系统的CPU体系结构和操作系统是什么?@daxim:它是一个英特尔赛扬J3355(64位英特尔),运行一个名为DSO(DiskStation操作系统)的基于Linux的操作系统。对不起,我自己应该考虑到这一点,因为这里的大小限制,在原始帖子中添加了它。这让我走上了正确的方向!尽管我使用“--两个线程”安装了Perl,但Perl-V在编译时选项中没有显示USE_ITHREADS。只有使用
perlbrew install 5.24.0-Dusethreads显式安装它,它才会出现。然后,我将生成的auto和Device文件夹复制到DS218的主文件夹中,现在发生了另一件奇怪的事情:在主文件夹中,我可以运行
perl-MDevice::SerialPort-e'print“OK”
fine,但如果我将其复制到site\u perl文件夹,我会得到“找不到…”尽管文件具有正确的权限,但仍存在错误。是否要使用我的评论中的信息展开您的答案?既然您给了我使其至少在理论上运行所必需的重要信息,我想给您提供正确的解决方案标记。否则,我将自己回答我的问题,并解释正确编译模块的过程。对不起,我有一个复制错误,导致“找不到错误”,因此请忽略我第一条评论的后半部分,不幸的是,我无法再编辑它。现在一切都很好,非常感谢!继续,提供你自己的答案并接受它。