バイナリ形式の C ライブラリ (.so
ファイル) とそのライブラリの Perl バインディングのソース (Makefile.PL
など) で構成される Perl ライブラリがあります。
必要なのは、ライブラリに同梱されている Perl サンプルを実行する機能だけです。グローバルに何かをインストールしたり、システム全体の構成を変更したりしたくありません。
だから私は特別なユーザーを作成し、すべてをホームディレクトリ内で実行したいと考えています。もちろん、環境を変更してホームディレクトリにファイル/フォルダーを追加しても問題ありません。
私はすでにlocal::lib
さまざまな CPAN ヘルパーをシステム全体にインストールしています ( cpan
、cpanp
そのcpanm
ため、それらが役立つ場合はそれらを使用できます。
作成~/lib
してそこに置く.so
ことも、 内のどこかに置くこともできます~/perl5
。
問題は、コンパイル時および実行時に共有 C ライブラリを Perl バインディングで使用できるようにする方法です。環境変数が必要なようですがLD_LIBRARY_PATH
、LDFLAGS
それらを一緒に使用する方法がわかりませんlocal::lib
。
さらに、ライブラリの名前はfoo.1.2.3.4.so
but リンカーが望んでい-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
スイッチを含めると機能しますが、汚れているように感じます。