2011.09.15
【Perl】LWP::Protocol::httpsインストール時の問題
WWW::Mechanizeを使ってhttpsへアクセスするにはLWP::Protocol::httpsが必要となるのでインストールします。
何も考えずcpan経由でPerlへインストールします。
# cpan > install LWP::Protocol::https
そうするとこんな感じでエラーになる。
cc -shared -O2 -L/usr/local/lib -fstack-protector SSLeay.o -o blib/arch/auto/Crypt/SSLeay/SSLeay.so \ -L/usr/local/ssl/lib -lssl -lcrypto \ /usr/bin/ld: /usr/local/ssl/lib/libssl.a(s2_clnt.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/local/ssl/lib/libssl.a: could not read symbols: Bad value
どうも内部で使っているNet-SSLeayがこけてしまっているらしい。
Net-SSLeayはOpenSSLを使用しているらしくその内部ライブラリがよろしくないようです。
てことでOpenSSLを手動で入れなおし。
解凍後からの処理はこんな感じ。
$ ./config --shared $ make # make install
--sharedをつけると-fPICオプションをつけてコンパイルしてくれるらしい。
yumとかのパッケージだと-fPICオプションがついていないぽい。
これをつけないとNet-SSLeayでは使用できないようです。
Link:Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか - bkブログ
Windowsで言うところのDLLじゃないと動かないみたいな問題なのでしょう。
これで、上記の手順で問題なくコンパイルできました。
関連記事