You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:00:04