arm-linux-gnueabihf交叉编译Perl 5.38.0带线程链接错误求助
交叉编译带线程支持的Perl 5.38.0(arm-linux-gnueabihf架构)时出现未定义引用错误
使用perl-cross工具为arm-linux-gnueabihf架构交叉编译Perl 5.38.0时,未添加-Dusethreads参数编译正常,但启用线程支持后,链接阶段出现大量PL_开头全局变量的未定义引用错误,具体错误信息如下:
libperl.a(DynaLoader.o): In function `S_MgBYTEPOS': DynaLoader.c:(.text+0x2ac8): undefined reference to `PL_curcop' libperl.a(DynaLoader.o): In function `Perl_TOPMARK': DynaLoader.c:(.text+0x2b00): undefined reference to `PL_markstack_ptr' libperl.a(DynaLoader.o): In function `Perl_POPMARK': DynaLoader.c:(.text+0x2b48): undefined reference to `PL_markstack_ptr' libperl.a(DynaLoader.o): In function `Perl_gimme_V': DynaLoader.c:(.text+0x49e8): undefined reference to `PL_op' DynaLoader.c:(.text+0x49ec): undefined reference to `PL_curstackinfo' libperl.a(DynaLoader.o): In function `Perl_cx_pushblock': DynaLoader.c:(.text+0x4ba8): undefined reference to `PL_curstackinfo' DynaLoader.c:(.text+0x4bac): undefined reference to `PL_stack_base' DynaLoader.c:(.text+0x4bb0): undefined reference to `PL_curcop' DynaLoader.c:(.text+0x4bb4): undefined reference to `PL_markstack_ptr' DynaLoader.c:(.text+0x4bb8): undefined reference to `PL_markstack' DynaLoader.c:(.text+0x4bbc): undefined reference to `PL_scopestack_ix' DynaLoader.c:(.text+0x4bc0): undefined reference to `PL_curpm' DynaLoader.c:(.text+0x4bc4): undefined reference to `PL_tmps_floor' DynaLoader.c:(.text+0x4bc8): undefined reference to `PL_tmps_ix' libperl.a(DynaLoader.o): In function `Perl_cx_popblock': DynaLoader.c:(.text+0x4c6c): undefined reference to `PL_markstack' DynaLoader.c:(.text+0x4c70): undefined reference to `PL_markstack_ptr' DynaLoader.c:(.text+0x4c74): undefined reference to `PL_scopestack_ix' DynaLoader.c:(.text+0x4c78): undefined reference to `PL_curpm' DynaLoader.c:(.text+0x4c7c): undefined reference to `PL_curcop' DynaLoader.c:(.text+0x4c80): undefined reference to `PL_tmps_floor' libperl.a(DynaLoader.o): In function `Perl_cx_topblock': DynaLoader.c:(.text+0x4d24): undefined reference to `PL_markstack' DynaLoader.c:(.text+0x4d28): undefined reference to `PL_markstack_ptr' DynaLoader.c:(.text+0x4d2c): undefined reference to `PL_scopestack_ix' DynaLoader.c:(.text+0x4d30): undefined reference to `PL_curpm' DynaLoader.c:(.text+0x4d34): undefined reference to `PL_stack_base' DynaLoader.c:(.text+0x4d38): undefined reference to `PL_stack_sp' libperl.a(DynaLoader.o): In function `Perl_cx_pushsub': DynaLoader.c:(.text+0x4eec): undefined reference to `PL_op' DynaLoader.c:(.text+0x4ef0): undefined reference to `PL_curstackinfo' DynaLoader.c:(.text+0x4ef4): undefined reference to `PL_comppad' libperl.a(DynaLoader.o): In function `Perl_cx_popsub_common': DynaLoader.c:(.text+0x4fd4): undefined reference to `PL_comppad' DynaLoader.c:(.text+0x4fd8): undefined reference to `PL_curpad' DynaLoader.c:(.text+0x4fdc): undefined reference to `PL_curstackinfo' libperl.a(DynaLoader.o): In function `Perl_cx_popsub_args': DynaLoader.c:(.text+0x5108): undefined reference to `PL_defgv' DynaLoader.c:(.text+0x510c): undefined reference to `PL_curpad' libperl.a(DynaLoader.o): In function `Perl_cx_pushformat': DynaLoader.c:(.text+0x5280): undefined reference to `PL_curstackinfo' DynaLoader.c:(.text+0x5284): undefined reference to `PL_defoutgv' DynaLoader.c:(.text+0x5288): undefined reference to `PL_comppad' libperl.a(DynaLoader.o): In function `Perl_cx_popformat': DynaLoader.c:(.text+0x539c): undefined reference to `PL_comppad' DynaLoader.c:(.text+0x53a0): undefined reference to `PL_curpad' DynaLoader.c:(.text+0x53a4): undefined reference to `PL_curstackinfo' libperl.a(DynaLoader.o): In function `Perl_push_evalortry_common': DynaLoader.c:(.text+0x54a8): undefined reference to `PL_eval_root' DynaLoader.c:(.text+0x54ac): undefined reference to `PL_parser' DynaLoader.c:(.text+0x54b0): undefined reference to `PL_top_env' DynaLoader.c:(.text+0x54b4): undefined reference to `PL_in_eval' DynaLoader.c:(.text+0x54b8): undefined reference to `PL_op' libperl.a(DynaLoader.o): In function `Perl_cx_pusheval': DynaLoader.c:(.text+0x555c): undefined reference to `PL_curstackinfo' libperl.a(DynaLoader.o): In function `Perl_cx_pushtry': DynaLoader.c:(.text+0x55b0): undefined reference to `PL_curstackinfo' libperl.a(DynaLoader.o): In function `Perl_cx_popeval': DynaLoader.c:(.text+0x56a8): undefined reference to `PL_in_eval' DynaLoader.c:(.text+0x56ac): undefined reference to `PL_eval_root' DynaLoader.c:(.text+0x56b0): undefined reference to `PL_curstackinfo' libperl.a(DynaLoader.o): In function `Perl_cx_pushloop_plain': DynaLoader.c:(.text+0x56f0): undefined reference to `PL_op' libperl.a(DynaLoader.o): In function `Perl_cx_pushloop_for': DynaLoader.c:(.text+0x5750): undefined reference to `PL_op' libperl.a(DynaLoader.o): In function `Perl_cx_pushwhen': DynaLoader.c:(.text+0x58e8): undefined reference to `PL_op' libperl.a(DynaLoader.o): In function `Perl_cx_pushgiven': DynaLoader.c:(.text+0x5958): undefined reference to `PL_op' libperl.a(DynaLoader.o): In function `Perl_cx_popgiven': DynaLoader.c:(.text+0x59d4): undefined reference to `PL_defgv' libperl.a(DynaLoader.o): In function `Perl_foldEQ_locale': DynaLoader.c:(.text+0x5c64): undefined reference to `PL_fold_locale' libperl.a(DynaLoader.o): In function `Perl_mortal_getenv': DynaLoader.c:(.text+0x5d08): undefined reference to `PL_scopestack_ix' libperl.a(DynaLoader.o): In function `S_new_body': DynaLoader.c:(.text+0x62a8): undefined reference to `PL_body_roots' libperl.a(DynaLoader.o): In function `Perl_newSV_type': DynaLoader.c:(.text+0x6770): undefined reference to `PL_sv_root' DynaLoader.c:(.text+0x6774): undefined reference to `PL_sv_count' DynaLoader.c:(.text+0x6780): undefined reference to `PL_stashcache' libperl.a(DynaLoader.o): In function `Perl_SvTRUE_common': DynaLoader.c:(.text+0x6ac4): undefined reference to `PL_sv_immortals' libperl.a(DynaLoader.o): In function `Perl_sv_setpv_freshbuf': DynaLoader.c:(.text+0x74ac): undefined reference to `PL_tainted' DynaLoader.c:(.text+0x74b0): undefined reference to `PL_tainting' libperl.a(DynaLoader.o): In function `XS_DynaLoader_dl_load_file': DynaLoader.c:(.text+0x7874): undefined reference to `PL_stack_sp' DynaLoader.c:(.text+0x7878): undefined reference to `PL_stack_base' libperl.a(DynaLoader.o): In function `XS_DynaLoader_dl_unload_file': DynaLoader.c:(.text+0x7ae4): undefined reference to `PL_stack_sp' DynaLoader.c:(.text+0x7ae8): undefined reference to `PL_stack_base' DynaLoader.c:(.text+0x7af0): undefined reference to `PL_op' DynaLoader.c:(.text+0x7af4): undefined reference to `PL_curpad' DynaLoader.c:(.text+0x7afc): undefined reference to `PL_tainted' libperl.a(DynaLoader.o): In function `XS_DynaLoader_dl_find_symbol': DynaLoader.c:(.text+0x7d38): undefined reference to `PL_stack_sp' DynaLoader.c:(.text+0x7d3c): undefined reference to `PL_stack_base' libperl.a(DynaLoader.o): In function `XS_DynaLoader_dl_undef_symbols': DynaLoader.c:(.text+0x7e1c): undefined reference to `PL_stack_sp' DynaLoader.c:(.text+0x7e20): undefined reference to `PL_stack_base' libperl.a(DynaLoader.o): In function `XS_DynaLoader_dl_install_xsub': DynaLoader.c:(.text+0x804c): undefined reference to `PL_stack_sp' DynaLoader.c:(.text+0x8050): undefined reference to `PL_stack_base' libperl.a(DynaLoader.o): In function `XS_DynaLoader_dl_error': DynaLoader.c:(.text+0x8178): undefined reference to `PL_stack_sp' DynaLoader.c:(.text+0x817c): undefined reference to `PL_stack_base' libperl.a(DynaLoader.o): In function `boot_DynaLoader': DynaLoader.c:(.text+0x82d4): undefined reference to `PL_stack_base' DynaLoader.c:(.text+0x82d8): undefined reference to `PL_stack_sp' collect2: error: ld returned 1 exit status make[1]: *** [perl] Error 1 make: *** [all] Error 2
已确认这些未定义的PL_开头变量在intrpvar.h中有定义,怀疑与MULTIPLICITY宏定义相关,尝试过以下操作但均未解决问题:
- 在
intrpvar.h末尾添加#include "embedvar.h" - 添加或移除
-Dusemultiplicity编译参数
希望通过修改源码或Makefile的补丁来解决该问题。
内容的提问来源于stack exchange,提问作者di386
相关产品推荐
相关产品推荐

