mp3splt を実行して “undefined symbol: mp3splt_u_check_if_directory” と出力されたときの対処法
mp3 ファイルを分割してくれる mp3splt というライブラリがあります。
mp3 ファイルを分割したい要件があったので動作検証してみると “undefined symbol: mp3splt_u_check_if_directory” と出力されてエラーになってしまいました。この記事はこのエラーの対処法です。
同じエラーメッセージでも環境によってこの記事の内容では解決しない場合もあるかと思うので、環境についてもメモしておきます。
photo credit: Philippe Put via photopin cc
目次
- 1. mp3splt を実行した環境
- 2. 原因は最新バージョンの mp3splt ではないから?
- 3. RPM から最新バージョンの mp3splt をインストールする
- 4. mp3splt を使って mp3 ファイルを5分間隔で分割する
- 5. まとめ
- 6. その他 Linux に関する記事
1. mp3splt を実行した環境
実行環境は 64 ビット版の CentOS 6.5 です。さっさと OS のインストールを終わらせたかったので “Minimal” でインストールしました。
インストール後に行った設定は、別記事で紹介した以外のものだけです。
なので、ほぼ何も入っていない状態に近いと思います。
2. 原因は最新バージョンの mp3splt ではないから?
上の設定で、ATrpms リポジトリを追加したのは、mp3splt は yum の ATrpms リポジトリで入手できると CentOS のフォーラムに書いてあったからです。
ATrpms リポジトリはデフォルトで disabled にしてあるので、yum
を次のように実行しました。
[hoge@CentOS6 ~]$ sudo yum --enablerepo=atrpms -y install mp3splt : : Installed: mp3splt.x86_64 0:2.4.1-9.el6 Dependency Installed: flac.x86_64 0:1.2.1-6.1.el6 libid3tag.x86_64 0:0.15.1b-11.el6 libmad0.x86_64 0:0.15.1b-4.el6 libmp3splt.x86_64 0:0.9.0-13.el6 libogg.x86_64 2:1.1.4-2.1.el6 libtool-ltdl.x86_64 0:2.2.6-15.5.el6 libvorbis.x86_64 1:1.2.3-4.el6_2.1 Complete!
インストールできたので、再生時間15分の mp3 ファイルを5分間隔で分割するために以下のコマンドを実行してみると、、、
[hoge@CentOS6 mp3splt]$ mp3splt 15min.mp3 -t 5.00 mp3splt 2.4.1 (14/11/11) - using libmp3splt Matteo Trotta <mtrotta AT users.sourceforge.net> Alexandru Munteanu <io_fx AT yahoo.fr> THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! Searching for plugins ... Scanning plugins in the directory _/usr/lib64/libmp3splt0_ Looking at the file _libsplt_mp3.so.0_ Looking at the file _libsplt_ogg.so.0.0.0_ Looking at the file _libsplt_flac.so.0.0.0_ Looking at the file _libsplt_ogg.so.0_ Looking at the file _libsplt_mp3.so.0.0.0_ Looking at the file _libsplt_flac.so.0_ Checking if _/usr/lib64/libmp3splt0/libsplt_mp3.so.0_ is like _/usr/lib64/libmp3splt0/libsplt_ogg.so.0_ Checking if _/usr/lib64/libmp3splt0/libsplt_flac.so.0_ is like _/usr/lib64/libmp3splt0/libsplt_ogg.so.0_ Checking if _/usr/lib64/libmp3splt0/libsplt_flac.so.0_ is like _/usr/lib64/libmp3splt0/libsplt_mp3.so.0_ Scanning plugins in the directory _/home/hoge/.libmp3splt_ Scanning plugins in the directory _./_ Trying to open the plugin _/usr/lib64/libmp3splt0/libsplt_ogg.so.0_ ... - success ! Trying to open the plugin _/usr/lib64/libmp3splt0/libsplt_mp3.so.0_ ... - success ! Trying to open the plugin _/usr/lib64/libmp3splt0/libsplt_flac.so.0_ ... - success ! Number of plugins found: _3_ plugin filename = _/usr/lib64/libmp3splt0/libsplt_ogg.so.0_ plugin name = _ogg vorbis (libvorbis)_ plugin version = _1.000000_ extension = _.ogg_ plugin filename = _/usr/lib64/libmp3splt0/libsplt_mp3.so.0_ plugin name = _mp3 (libmad)_ plugin version = _1.000000_ extension = _.mp3_ plugin filename = _/usr/lib64/libmp3splt0/libsplt_flac.so.0_ plugin name = _flac (libflac)_ plugin version = _1.000000_ extension = _.flac_ Setting silence log fname to _mp3splt.log_ mp3splt: symbol lookup error: mp3splt: undefined symbol: mp3splt_u_check_if_directory
っと、この記事のタイトルにもなっているように “undefined symbol: mp3splt_u_check_if_directory” と出力されエラーになってしまいました。。。
そこで、このエラーメッセージで検索してみると、mp3splt の メーリングリスト に次の書き込みを見つけました。
rhel6 is difficult to maintain, because the environment is “too old”. However, I have several versions, and maybe one works for you. If you could check which works, I can update the packages in ATrpms.
意訳すると、「古いから他のバージョンを試してみろよ」って感じでしょうか。
それが解決策だっていうのは何だか釈然としませんが、分割できればいいので素直に最新の mp3splt を入れ直すことにしました。
3. RPM から最新バージョンの mp3splt をインストールする
メーリングリストの書き込みに最新の mp3splt の RPM を配布しているサイトのリンクが載っていました。
ここにもそのサイトのリンクを貼っておきます。
まずは、yum
でインストールした mp3splt をアンインストールします。
[hoge@CentOS6 mp3splt]$ sudo yum remove mp3splt : : Removed: mp3splt.x86_64 0:2.4.1-9.el6 Complete!
次に RPM を wget
でダウンロードします。
[hoge@CentOS6 mp3splt]$ wget http://orion.lcg.ufrj.br/RPMS/myrpms-el6-x86_64/lcgrpms/mp3splt-2.6-13.el6.x86_64.rpm : : 2014-08-05 05:01:48 (28.5 KB/s) - `mp3splt-2.6-13.el6.x86_64.rpm' へ保存完了 [54164/54164]
最後にこの RPM を rpm
コマンドでインストールします。
[hoge@CentOS6 mp3splt]$ sudo rpm -ivh mp3splt-2.6-13.el6.x86_64.rpm 警告: mp3splt-2.6-13.el6.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 5549a96e: NOKEY 準備中... ########################################### [100%] 1:mp3splt ########################################### [100%]
これで最新版の mp3splt に置き換わりました。
4. mp3splt を使って mp3 ファイルを5分間隔で分割する
最新版の mp3splt をインストールしたので、先ほどもチャレンジしたように mp3 ファイルを5分間隔で分割してみます。
[hoge@CentOS6 mp3splt]$ mp3splt 15min.mp3 -t 5.00 mp3splt 2.6 (20/07/13) - using libmp3splt 0.9.0 Matteo Trotta <mtrotta AT users.sourceforge.net> Alexandru Munteanu <m AT ioalex.net> THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! Processing file '15min.mp3' ... info: file matches the plugin 'mp3 (libmad)' info: MPEG 1 Layer 3 - 48000 Hz - Joint Stereo - 128 Kb/s - Total time: 15m.00s info: starting time mode split File "15min_00m_00s__05m_00s.mp3" created File "15min_05m_00s__10m_00s.mp3" created File "15min_10m_00s__15m_00s.mp3" created File "15min_15m_00s__15m_00s_9h.mp3" created time split ok
今度は見事に成功して分割されました。
分割された mp3 を再生してみましたが、確かに5分で分割されていました。
5. まとめ
以上、”undefined symbol: mp3splt_u_check_if_directory” と出力されたときの対処法でした。
- mp3splt は ATrpms リポジトリからでもインストールできる
yum
でインストールされるライブラリは常に最新版とは限らないようだyum
を使って最新版のライブラリをインストールしたい場合は、ひとまず配布されているライブラリのバージョンを確認する
6. その他 Linux に関する記事
その他の Linux に関する記事は次の通りです。
気になる記事があったらぜひチェックしてみてください!
-
”Jerseyの@PathParamはスラッシュの間に複数指定できる”VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する”バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)”ユニットテストの偏りを防ぐ命名規則の付け方”Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定”Vagrantで起動したCentOS上のMySQLにホストOSからログインする設定”Optionalから値を取り出すにはorElseGet()を使う”GoogleGuavaのRangeを使って範囲判定を簡潔に書く”Functions#compose() を使って Function を合成するサンプル(Java8 との比較付き)”Google Guava の Function を使った文字列加工の FluentIterable サンプル”Gradle で Java アプリのプロジェクトを作成して Eclipse にインポートするまでの手順”SDKMAN!(GVM) を使って Mac に Gradle をインストールする”Exec Maven Plugin で maven コマンドでアプリを起動する”Spark を使って JSON を返すシンプルな API を書いてみた”Stream#filter()で絞り込みmap()で処理するコードスニペット”Stream#map()とStream#collect()を使ってListを生成する”Optional型の変数にget()とifPresent()は使わない”Java8 の Optional 型を返す Generics を使ったメソッドを定義する”Java8 の Optional とガード節”Bundler を使ってプロジェクト用の Gem をインストールして Gemfile をバージョン管理ツールに登録するまでの流れ”シェルスクリプトでcdしたいパスにスペースが入っている場合の対処法”CentOSにRubyのBundlerをインストールして使い始める人向けの簡単なまとめ”amazon-ecsを使った検索のエラー原因を確認する”CentOS6.5にGitをソースコードからインストールする”CentOSのバージョン6.5(64ビット)にamazon-ecsをインストールする”CentOSのバージョン6.5(64ビット)にRuby2.1.2をインストールする”検証用の CentOS をインストールした直後に行う初期設定手順”64ビット版のCentOSをVMwareにインストールできない場合の対処法”参照可能な yum リポジトリを確認する yum コマンドとワンライナー”yum のリポジトリ ATrpms を参照できるように設定する”scp を使ってファイルのコピーを実行したら "command not found" と表示されたときの対処法”scp コマンドを yum を使って CentOS にインストールする”yum が参照するミラーサイトの baseurl を変更して日本国内のものに設定する”CentOS に yum-plugin-priorities プラグインをインストールする”Linuxでmp3をお手軽に結合する”シェルスクリプトでメールを送信する”ロードアベレージを監視するシェルスクリプトを作成してみた”保存ダイアログを表示させてファイルをダウンロードさせる方法”Error オブジェクトの種類と独自例外オブジェクトの作成方法”昭和記念公園で快適に過ごすために覚えておきたいこと”海の公園潮干狩りレポート 2014年版”GTMatrix の診断結果でF判定になった項目の対策まとめ”Tomcatの再起動はworkディレクトリも削除しておいた方が無難”JavaScriptなどをフォーマットするGruntプラグイン grunt-jsbeautifier を使ってみる”Eclipse がエラーメッセージを出力して起動しなくなった場合の対処法”Markdown記法のテキストに書いたソースコードをシンタックスハイライトするプラグイン”子どもの初めての習い事に水泳を選んだ理由”横浜「海の公園」の潮干狩り計画(2014)を立ててみた”GoogleMapsAPIを使って緯度・経度からMarkerを作成する方法”ブログを本格的に始めて3ヶ月経って分かったこと”GoogleMapsAPIを使ってMarkerを削除する方法”GoogleMapsAPIを使ってMarkerの表示と非表示を切り替える方法”Grunt の grunt-contrib-watch を使うと CPU 使用率が上がるので spawn: false を試してみた結果”BOSE のスピーカー Companion2 Series III の購入を検討されている方に”BootstrapValidator の基本的なバリデーションを試すサンプルを作成しました”TwitterBootstrap3 用のバリデーションチェックプラグイン BootstrapValidator の導入から Live チェックまでを試してみた”JavaScript のクラス定義”InputStream に格納されているストリームデータのサイズを取得する”Grunt + QUnit + PhantomJS でテストを自動実行してくれる環境を構築する”GoogleMaps の JavaScript API(v3) を使って、常に1つの InfoWindow だけ表示されるように制御する”GoogleMap サンプルのプロジェクトに Grunt の LiveReload を有効にする設定を追加しました”GitHub にアップされているブランチをローカルに取り込む”GoogleMaps の JavaScript API (v3) を使って地図上に複数の Marker を表示するサンプル”Sublime Text3 で JavaScript を書くために設定したプラグインとキーバインド”Sublime Text3 で Markdown のシンタックスハイライトを有効にする手順”TwitterBootstrap3 をベースにした画面に GoogleMap を埋め込む”Sublime Text3 に SublimeLinter-jshint をインストールしてみた”GoogleMap の Marker に InfoWindow を設定するサンプル”Sublime Text3 のインストール直後に行った設定メモ”GoogleMap を使って住所から緯度・経度を計算する”プロフィールページを追加しました”住所から GoogleMap を表示するサンプル”Java でファイルが1つだけ圧縮された zip を解凍するサンプル”Android アプリで ActionBar の背景色を変更する方法”Android アプリで "external/chromium/net/disk_cache/stat_hub.cc:216" とエラーメッセージが表示された場合の対処法”Android アプリで特定の Activity が呼ばれたらアプリを終了させる方法”Android の非同期処理を行う Loader の起動方法”Underscore.js の template を使うときは HTML にテンプレートを書こう”JSON をオブジェクトに変換するときに注意したいこと”Android アプリ開発で "cannot perform this action inside of onloadfinished" とエラーメッセージが表示された場面の対処法”Android アプリ開発で "Unable to resolve target 'android-16'" などとエラーメッセージが表示された場合の対処法”第24節 ミランvsボローニャ に関する記事ふりかえり”Daft Punk 素人がヘビーローテーションしている YouTube 動画10選”One Direction - "Story of My Life"”Underscore.js の template を使ってドリルダウンを実装するスニペット”jQuery を使って表示する画像を setInterval を使って切り替える”jQuery を使ってページの opacity を徐々に上げて fadeIn して見せる”Underscore.js の template と each を使って JSON から select タグを生成する”Stinger3 に Pocket ボタンを設置しました”Stinger3 に Feedly ボタンを設置しました”Stinger3 の single.php で使われている style.css をカスタマイズ”jQuery を使ってタグに設定されているクラスをすべて取り除いた後に指定のクラスに変更する”opencsv の HeaderColumnNameTranslateMappingStrategy を使って CSV を Bean に変換する”opencsv の HeaderColumnNameMappingStrategy を使って CSV を Bean に変換する”opencsv の ColumnPositionMappingStrategy を使って CSV を Bean に変換する”spring framework を使ったデスクトップアプリ(standalone app)で context から getBean でオブジェクトを取得する。@Autowired による紐付け”jsvc を使って daemon として起動した Tomcat のプロセス数が2つなのは正しい”Stinger3 の追尾式 SNS ボタンを削除する方法”spring framework を使ったデスクトップアプリ(standalone app)で maven-jar-plugin を使って作成した JAR を java コマンドで実行する”Tomcat7 を jsvc で起動する手順”spring framework を使ったデスクトップアプリ(standalone app)で context から getBean でオブジェクトを取得する”指定した年月の日付を Calendar オブジェクトの一覧で取得する”リストに格納されているオブジェクトを marshal する場合に付与すると便利な @XmlElementWrapper アノテーション”ClassLoader を使って getResourceAsStream で取得したファイルを UTF-8 で読み込む”JAXB を使ってオブジェクトを marshal する際に要素名を指定する方法”JAXB を使ってオブジェクトを marshal するために忘れてはいけない2つのこと”相模原市にある銀河アリーナでスケートを楽しむ”MUSH&Co. "明日も"”「領」と書かれた車のナンバープレートを見た!”Jersey で POST 送信処理後にダイレクトする方法”Android アプリでタイムゾーンを Asia/Tokyo で現在時刻を取得する”jQuery を使ってファイルアップロードフォームのファイルが選択されているかを確認する方法”jQuery を使ってチェックボックスのチェックを付けたり外したりするコードスニペット”9円!!”レスポンスにサムネイル画像を返す API のサンプル”ImageMagick を使ってサムネイル画像を作成する方法”ImageMagick を使って画像を結合する方法”ImageMagick を使って Exif を取り除く方法”Maven で作成したプロジェクトのソースコードを JAR にする方法”Spring の Scheduled アノテーションを使った cron サンプル”Spring の設定ファイル applicationContext.xml の内容をプロパティファイルに切り出す”MySQL の JDBC ドライバで設定しておきたい rewriteBatchedStatements プロパティ”SpringJDBC が発行する SQL をログに出力する”Spring の DataSource に DBCP を使用する”JUnit4 のパラメータ化テストは4通りの方法で書ける”JUnit4 の Enclosed を使ったテストクラスサンプル”JUnit4 で JavaBeans の assertThat を簡潔に書きたい”JUnit4 で List の assertThat を簡潔に書きたい”AgeFileFilter を使ったフィルタ処理のサンプル”SizeFileFilter を使ったフィルタ処理のサンプル”DirectoryFileFilter を使ったフィルタ処理のサンプル”海老名サービスエリアに徒歩で行ってきました”commons-io に見るファイル操作処理のヒント(FilenameUtils編)”Commons IO の LineIterator#isValidLine メソッドをオーバーライドしたサンプル”プロセスの起動を確認するプログラム”配列の内容をファイルに書き込む”拡張子を指定したフィルタの実装サンプル”opencsv を使って CSV ファイルの読み込み開始行を指定する”opencsvの検証をしてみた”commons-io に見るファイル操作処理のヒント(FileUtils編その2)”ファイルを読み込んでその内容を保持する”プログラミングの「面倒くせー」を減らす試み”Redcarpet を使って Markdown をパースする”commons-io に見るファイル操作処理のヒント(FileUtils編その1)”commons-io に見るファイル操作処理のヒント(IOUtils編)”commons-io に見るファイル操作処理のヒント(FileBasedTestCase編)”SQL で表現する階層関係のモデル”Github に人間認定されなくなった”ビジネスメールの言い回しテンプレート”こどもの国の屋外プールに行ってきた”Maven で Web アプリ用のプロジェクトを作成してからコーディングを着手するまでにやること”Android アプリで Google Analytics へトラッキングするサンプルクラス”電子政府推奨暗号リスト”より安全にパスワードを保存するために考えること”初めてのアンドロイドアプリ開発振り返り”ローカルブランチの確認と切り替え方法”ファイルに関するユーティリティ”ディレクトリに関するユーティリティ”WebView からデフォルトブラウザを開く”位置情報取得に関する覚え書き、その2”AlertDialog の背景をタップできなくする”位置情報取得に関する覚え書き”AlertDialog がキャンセルされたときに処理を行うスニペット”with_index メソッド”ImageMagick を使って画像の縦横サイズを縮小する”ファイルの拡張子が JPG であるかを問い合わせるスニペット”画像ファイルを選別するFilenameFilter”画像ファイルのサイズ(縦横じゃなくて容量)を取得するスニペット”サーブレットでクラスパス上にあるプロパティファイルを参照するスニペット”Jetty でシンプルなプロジェクトを作成してみた”google-gson でシリアライズ・デシリアライズしたサンプル”Java から VBScript を使って Excel を印刷する”IE9 のキャッシュ対策”今年も潮干狩りに行ってきた”amazon-ecs を使って Amazon から関連商品情報を取得するサンプル”no space left と表示されたときの対処法”amazon-ecs を使って Amazon から商品情報を取得するサンプル”CVS でタグ間で変更があったファイルを抽出するスクリプト”VPS に Redmine を設置したときに対処したトラブル”VPS に Nokogiri をインストールしたときのトラブル
Googleアドセンス用(PC)
関連記事
-
-
scp コマンドを yum を使って CentOS にインストールする
小ネタです。 yum install scp ではなかったのでメモしておきます。 photo
-
-
ロードアベレージを監視するシェルスクリプトを作成してみた
このブログを運用している Linux サーバの負荷が高い状態になってました。 何か被害にあったとかで
-
-
CVS でタグ間で変更があったファイルを抽出するスクリプト
今どきバージョン管理ツールに CVS を使っているところは珍しいと思うし、あまり需要はないだろうけど
-
-
64ビット版のCentOSをVMwareにインストールできない場合の対処法
Linux で検証したい作業が多かったので VMware に検証環境を作りました。OS は Cent
-
-
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する
配布されている Vagrant の Box ファイルを使って検証環境を構築することが多くなってきた。
-
-
Jerseyの@PathParamはスラッシュの間に複数指定できる
http://hoge-api/user/{id}.{format} のような URL も以下のよう
-
-
より安全にパスワードを保存するために考えること
知ってる人にとっては当たり前のことだろうが、あまり深く考えたことがなかったので調べてみた。 前提
-
-
検証用の CentOS をインストールした直後に行う初期設定手順
職場でも自宅でも Linux で検証したい作業があったので VMware に 64 ビット版の Ce
-
-
シェルスクリプトでメールを送信する
このブログを運用している Linux サーバの監視スクリプトを作成した記事を書きました。 ロード
-
-
GoogleGuavaのRangeを使って範囲判定を簡潔に書く
次のような判定処理を if 文で書くことがよくある。 もし 100 よりも大きければ(=大小判定