这是在我所知道的范围内,请在此处纠正任何混淆。在这个问题中,我问为什么由libm
Perl 接口提供的功能尚未向用户公开。现在我想知道它是如何完成的。
CPAN 上有一个声称可以这样做的模块,称为Math::Libm
. 这很好用,但是当我使用它时,作为一个关于实现的问题,我发现不仅 libm 映射到进程中,就像 Debian 上任何正在运行的 Perl 解释器一样,
7f719246d000-7f719247c000 r--p 00000000 fe:01 86513750 /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f719247c000-7f7192516000 r-xp 0000f000 fe:01 86513750 /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f7192516000-7f71925af000 r--p 000a9000 fe:01 86513750 /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f71925af000-7f71925b0000 r--p 00141000 fe:01 86513750 /usr/lib/x86_64-linux-gnu/libm-2.31.so
7f71925b0000-7f71925b1000 rw-p 00142000 fe:01 86513750 /usr/lib/x86_64-linux-gnu/libm-2.31.so
但Math::Libm
也映射到另一个 libm 共享对象中,
7fb649043000-7fb649044000 r--p 00000000 fe:01 11143927 /home/ecarroll/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Math/Libm/Libm.so
7fb649044000-7fb649049000 r-xp 00001000 fe:01 11143927 /home/ecarroll/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Math/Libm/Libm.so
7fb649049000-7fb64904a000 r--p 00006000 fe:01 11143927 /home/ecarroll/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Math/Libm/Libm.so
7fb64904a000-7fb64904b000 r--p 00006000 fe:01 11143927 /home/ecarroll/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Math/Libm/Libm.so
7fb64904b000-7fb64904c000 rw-p 00007000 fe:01 11143927 /home/ecarroll/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/auto/Math/Libm/Libm.so
这似乎是因为Autoloader
加载了外部共享对象。
是否可以在不加载外部共享对象的情况下访问驻留进程中已经存在的符号?