perl 操作 MongoDB エラー 未定義のシンボル。HeUTF8 解決策
2022-01-28 12:53:58
mongoのシェル操作はかなり面倒なので、perlを使ってmongoを操作してみましたが、perlはmongodbを操作するにはまず対応するドライバをインストールする必要があり、ほとんどの人はcpanを使ってインストールしますが、私はそれがあまりにも面倒だと思う、cpanmを使ってperlモジュールをインストールします。
コピーコード
コードは以下の通りです。
# cpanm MongoDB
--> Working on MongoDB
Fetching http://www.cpan.org/authors/id/F/FR/FRIEDO/MongoDB-0.702.1.tar.gz ... OK
Configuring MongoDB-0.702.1 ... OK
Building and testing MongoDB-0.702.1 ... FAIL
Installing MongoDB failed. Installing MongoDB failed. See /root/.cpanm/work/1376540233.15152/build.log for details. Retry with --force to force install it.
cpanmは、-forceパラメータを使用して、エラーを報告しています。
コピーコード
コードは以下の通りです。
# cpanm MongoDB --force
--> Working on MongoDB
Fetching http://www.cpan.org/authors/id/F/FR/FRIEDO/MongoDB-0.702.1.tar.gz ... OK
Configuring MongoDB-0.702.1 ... OK
Building and testing MongoDB-0.702.1 ... FAIL
Testing MongoDB-0.702.1 failed but installing it anyway. Testing MongoDB-0.702.1 failed but installing it anyway.
Successfully installed MongoDB-0.702.1 (upgraded from 0.702.0)
1 distribution installe
すべて正常に動作しているように見えますが テストスクリプト
スクリプトを読みます。
コピーコード
コードは以下の通りです。
# cat /root/testMongo.pl
#! /usr/bin/perl
use MongoDB;
my $connection = MongoDB::Connection->new( host => 'localhost', port => 27017);
走ること
コピーコード
コードは以下の通りです。
# perl /root/testMongo.pl
/usr/bin/perl: symbol lookup error: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/MongoDB/MongoDB.so: undefined symbol : HeUTF8
googleで "MongoDB.so: undefined symbol.を検索すると、「MongoDB.so:undefined symbol.undefined」と出てきます。HeUTF8"でググると関連記事が1つだけ見つかりました。あるグループがこの問題について議論しています。そのうちの一人が次のような解決策を提示しています。
コピーコード
コードは以下の通りです。
# wget http://search.cpan.org/CPAN/authors/id/F/FR/FRIEDO/MongoDB-0.701.4.tar.gz
# tar -xzvf MongoDB-0.701.4.tar.gz
# cd MongoDB-0.701.4
Add the following to perl_mongo.h:
/* supply HeUTF8 if it's missing - ppport.h doesn't supply it, unfortunately */
#ifndef HeUTF8
#define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \
SvUTF8(HeKEY_sv(he)) : \
(U32)HeKUTF8(he))
#endif
# perl Makefile.PL
# make
# make install
perlスクリプトは問題なく実行されます。
実は非互換性の問題で、mongodb用のperlドライバの最終バージョンはRHEL5/CENTOS5ディストリビューション用のv0.45なんです
以下は、海外のユーザーからの回答です。
Rhel5/CentOS5でコンパイル、テスト、インストールが正常に行える最新バージョンはKRISTINAさんのv0.45です。(Any::Mooseが必要です)
https://metacpan.org/release/KRISTINA/MongoDB-0.45
関連
-
Perlのprint、printf、sprintfの使用例について説明します。
-
プロセス分析によるhttpsリクエストのチャールズベースクローリング
-
PerlのMail::POP3ClientモジュールとGmailの通信例
-
Perlの制御構造に関する学習ノート
-
perl で書かれた乱数話法プログラム (rand random function)
-
Perl 変数の使い方を説明するための Perl 構文
-
Perlのハッシュの使い方チュートリアル
-
Linux/Unix で Perl モジュールをインストールする 2 つの方法
-
[解決済み] Perlで浮動小数点数を丸めるには?
-
[解決済み] Perlでディレクトリ一覧を取得するには?[重複している]。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
指定したフォルダーにあるリンク切れファイルのシンボリックリンクを自動的に削除するスクリプト
-
Perlの文字列比較と整数比較の違いについて
-
Perlの基本的な配列のソート方法
-
Perl5 のコードを Perl6 に移行するためのソリューション
-
へのコメント Perl code for marriage proposal
-
Perl モジュールをパッケージ化し、外部依存性を追加する
-
perl変数$/の使用方法について説明します。コンテキストが行モードのとき、$/は行を区別するものを定義します。
-
perlの尖ったブラケット演算子(<>)について
-
[解決済み] MOSSスクリプトはどのように使うのですか?
-
[解決済み] Perlで日付/時刻をエポックタイム(1970年からのunix時間/秒)に変換するには?