我有一个 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.so
but 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
开关可以工作,但感觉很脏。