我有一个 Perl 库,它由一个二进制形式的 C 库(.so文件)和该库的 Perl 绑定源(Makefile.PL等)组成。
我所需要的只是运行库附带的 Perl 示例的能力。我想避免全局安装任何东西或更改系统范围的配置。
所以我创建了一个特殊用户,我希望一切都在主目录中运行。更改环境并在 homedir 中添加文件/文件夹当然没问题。
我已经在local::lib系统范围内安装了各种 CPAN 助手 ( cpan,cpanp因此cpanm如果它们有任何帮助我可以使用它们。
我可以创建~/lib并放在.so那里,或者把它放在里面的某个地方~/perl5。
问题是如何在编译期间和运行时使共享 C 库可用于 Perl 绑定。似乎我需要LD_LIBRARY_PATH和LDFLAGS环境变量,但我不确定如何将它们与local::lib.
此外,该库被命名为foo.1.2.3.4.sobut linker want -lfoo。我应该自己创建foo.so -> foo.1.2.3.4.so符号链接吗?
更新:
生成的相关部分Makefile:
LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) $(LDDLFLAGS) $(LDFROM) $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) \
$(PERL_ARCHIVE) $(LDLOADLIBS) $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST) \
$(INST_DYNAMIC_FIX)
修补 LDDLFLAGS 以包含一个额外的-L开关可以工作,但感觉很脏。