stz2012 / libarib25 Goto Github PK
View Code? Open in Web Editor NEWLinux用ARIB STD-B25ライブラリ(各録画ツールにarib25ソースを添付しなくとも、Makefile内で-larib25でコンパイルできる)
License: Apache License 2.0
Linux用ARIB STD-B25ライブラリ(各録画ツールにarib25ソースを添付しなくとも、Makefile内で-larib25でコンパイルできる)
License: Apache License 2.0
現状、READMEでビルドの手順が説明されていません。
派生元のREADMEを残す意義は少ないと思いますので、ファイルをリネーム(例えばREADME_orig.md)した上で、新たなREADMEを作り、そこにビルドの手順を記述してはどうでしょうか。
このソフトウェアのライセンスは独自のものですが一般的なライセンスへの変更予定などはないでしょうか?
GNUのガイドラインで実装することが推奨されていた気がします。
短い形式としては-h
が望ましいと思います。
現在、引数なしで実行した際に表示される文言から
b25 - ARIB STD-B25 test program version stz-0.2.5 (v0.2.5-20180204)
built with GNU 10.2.1 on Linux-5.10.0-8-amd64
という部分を取り除き、代わりに--version
をつけて実行した際に表示することを提案します。
短い別名は、大文字の-V
でどうでしょうか。
度重なるissue申し訳ありません
どうしてもcmake内でのldconfigの実行が必要でしょうか?
もしそうならoptionでldconfigの実行を選択できるようにしていただけないでしょうか?
必要でない場合cmakeでのldconfigを削除し, build.sh, build.batを経由してビルドするようにしていただけないでしょうか?
ldconfigはユーザーが叩くかshで呼ぶものだと考えていましたが, マルチプラットフォームやライトユーザー向けの配慮, 歴史的経緯があるなど, 理由がある場合は教えていただけると幸いです.
お力を貸してください。
今 Docker (Alpine)で Tvheadend
という録画サーバーを使用しています。
フルセグで見れないのでカードリーダー&B-CASカードを用意して、libarib25
をインストールしましたが、まだ見れないです。
pcsc_scan
を実行してみたのですが、問題なくカードの読み込みができています。
コンテナに入って以下のコマンドでインストールしました。
git clone https://github.com/stz2012/libarib25.git
cd libarib25
cmake -DLDCONFIG_EXECUTABLE=IGNORE ./
make
make install
[ 55%] Built target arib25-objlib
[ 66%] Built target arib25-shared
[ 77%] Built target arib25-static
[100%] Built target b25
Install the project...
-- Install configuration: "Release"
-- Up-to-date: /usr/local/bin/b25
-- Up-to-date: /usr/local/lib64/libarib25.a
-- Up-to-date: /usr/local/lib64/libarib25.so.0.2.5
-- Up-to-date: /usr/local/lib64/libarib25.so.0
-- Up-to-date: /usr/local/lib64/libarib25.so
-- Up-to-date: /usr/local/include/arib25/arib_std_b25.h
-- Up-to-date: /usr/local/include/arib25/b_cas_card.h
-- Up-to-date: /usr/local/include/arib25/multi2.h
-- Up-to-date: /usr/local/include/arib25/ts_section_parser.h
-- Up-to-date: /usr/local/include/arib25/portable.h
-- Up-to-date: /usr/local/include/arib25/arib25_api.h
-- Up-to-date: /usr/local/lib64/pkgconfig/libarib25.pc
libarib25
のインストール方法については参考になるサイトがいくつかあったのですが、上記のコマンド以外は特に皆何もしていないので、上記のコマンドと別で何か実行する必要がありますか?
ldconfig
を実行すると libarib25.so.0
がデグレてしまう問題私が以前書いた CMake へのマイグレーションパッチがそもそもの原因です。大変ご迷惑をおかけて申し訳ありません。ごめんなさいm(_ _)m。症状としては、ldconfig
コマンドを実行すると意図せずして古いライブラリにリンクされる可能性があという問題です。
以前取り込んでいただいたチェンジセット以降 libarib25.so
の機能自体にはほとんど変更がなく、仮にデグレてしまったとしても現時点では実害はほぼないと思います。
また、前回の CMake マイグレーションパッチでは make install
を実行しても ldconfig
が自動で実行されることはありません。また、CMake の機能によりインストール時点では適切にシンボリックリンクが張られるため問題は発生しません。
問題が発生するのは、過去に libarib25 をインストールしたことがある環境で、新たに最新の libarib25 を
インストールした後 ldconfig
を実行した場合のみです。ldconfig
が実行されるまで問題が発覚しない恐れもあり、問題の発見が遅れる可能性があるので注意が必要です。
以前に libarib25 をインストールしたことのある環境などで、すでに libarib25.so.0.2.5
ファイルが以下のように存在している状態を想定します。
ubuntu@localhost:~$ ls -l /usr/local/lib
lrwxrwxrwx 1 root root 14 6月 7 02:20 /usr/local/lib/libarib25.so -> libarib25.so.0
lrwxrwxrwx 1 root root 22 6月 7 02:30 /usr/local/lib/libarib25.so.0 -> libarib25.so.0.2.5
-rwxr-xr-x 1 root root 179392 6月 7 02:11 /usr/local/lib/libarib25.so.0.2.5
CMake に移行後のリビジョンを Git でチェックアウトしてビルドする。
ubuntu@localhost:~$ mkdir ~/work/
ubuntu@localhost:~/work$ git clone https://github.com/stz2012/libarib25.git
ubuntu@localhost:~/work$ cd libarib25
ubuntu@localhost:~/work/libarib25$ git checkout 741377f65a7ca1482e47d78cfecc8f3d5802b537
ubuntu@localhost:~/work/libarib25$ mkdir build
ubuntu@localhost:~/work/libarib25$ cd build
ubuntu@localhost:~/work/libarib25/build$ cmake ..
ubuntu@localhost:~/work/libarib25/build$ make
ubuntu@localhost:~/work/libarib25/build$ sudo make install
この時点で /usr/local/lib
配下は以下のようになっている。
ubuntu@localhost:~$ ls -l libarib*
-rw-r--r-- 1 root root 45176 6月 7 02:30 libarib25.a
lrwxrwxrwx 1 root root 14 6月 7 02:20 libarib25.so -> libarib25.so.0
lrwxrwxrwx 1 root root 22 6月 7 02:30 libarib25.so.0 -> libarib25.so.stz-0.2.5
-rwxr-xr-x 1 root root 179392 6月 7 02:11 libarib25.so.0.2.5
-rwxr-xr-x 1 root root 45424 6月 7 02:30 libarib25.so.stz-0.2.5
CMake の機能によってシンボリックリンクは今回インストールした libarib25.so.stz-0.2.5
に向けられている。これは正しい状態ですが、CMake の機能によって偶然にも正しい状態になっているだけです。
この状態で、以下のように ldconfig
を実行する。
ubuntu@localhost:~$ sudo ldconfig
/usr/local/lib
配下のシンボリックリンクが ldconfig
により更新され、旧バージョンに向いてしまう。依然として libarib25.so.0
にリンクされている b25
コマンドやその他のアプリケーションは現在のところ正常に動作し続けるが、このまま状態は将来的にあまり良くない結果を招くかもしれない。また、もとからあった libarib25.so.0.2.5
が著しく古い場合等では意図せずして古いバージョンを使用し続けることになるので注意が必要です。
ubuntu@localhost:~$ ls -l libarib*
-rw-r--r-- 1 root root 45176 6月 7 02:30 libarib25.a
lrwxrwxrwx 1 root root 14 6月 7 02:20 libarib25.so -> libarib25.so.0
lrwxrwxrwx 1 root root 18 6月 7 03:36 libarib25.so.0 -> libarib25.so.0.2.5
-rwxr-xr-x 1 root root 179392 6月 7 02:11 libarib25.so.0.2.5
-rwxr-xr-x 1 root root 45424 6月 7 02:30 libarib25.so.stz-0.2.5
この問題の根本原因は、CMake マイグレーションパッチでバージョン情報を表示する部分でいわゆるバージョンを明確にするために、stz-
プレフィックスをつけたことによる副作用で、共有ライブラリの名前にも stz-
が付いてしまったことによります。
これによって ldconfig
が解釈できないバージョン名となってしまったため、libarib25.so.0
のリンクが ldconfig
の解釈できる最も最新のバージョンに向いてしまうこととなったということのようです。
現在、パッチを書いて検証中です。できるだけはやく修正をプルリク出したいと思います。
Raspberry Pi 3にてビルドを試みましたが、version.c のアーキテクチャ確認処理で引っかかりビルドが出来ませんでした。
デバッグ情報を表示するように変更(デバッグビルド時のみ)時点ではビルドが可能ですが、ビルド時にバージョン情報を埋め込むように変更からx86_64とi386以外のアーキテクチャでビルドができなくなっています。
pi@raspberrypi:~/.builds/libarib25/cmake $ make
Scanning dependencies of target arib25-objlib
[ 11%] Building C object CMakeFiles/arib25-objlib.dir/src/arib_std_b25.c.o
[ 22%] Building C object CMakeFiles/arib25-objlib.dir/src/b_cas_card.c.o
[ 33%] Building C object CMakeFiles/arib25-objlib.dir/src/multi2.c.o
[ 44%] Building C object CMakeFiles/arib25-objlib.dir/src/ts_section_parser.c.o
[ 55%] Building C object CMakeFiles/arib25-objlib.dir/src/version.c.o
/home/pi/.builds/libarib25/src/version.c:10:6: error: #error architecture not supported!
# error architecture not supported!
^
CMakeFiles/arib25-objlib.dir/build.make:158: recipe for target 'CMakeFiles/arib25-objlib.dir/src/version.c.o' failed
make[2]: *** [CMakeFiles/arib25-objlib.dir/src/version.c.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/arib25-objlib.dir/all' failed
make[1]: *** [CMakeFiles/arib25-objlib.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
公式でtarballの配布があると大変助かるのですが, githubでのリリースなどは予定していますか?
サイズが2GBを超えるファイルの変換時、進行状況のパーセント表示が正しくない件について、
td.cの282行目の
m = (int)(10000offset/total);
を、
m = (int)((uint64_t)10000offset/total);
と修正すれば直るようです。
Linuxで確認しました。
現状のライブラリのインストール先はlibになっていますが, ディストリビューションによっては正しいlib32やlib64にインストールされないようなものが出てきました.
https://wiki.gentoo.org/wiki/Project:AMD64/Multilib_layout
そこでシンボリックリンクを介さずに適切なパスを指定するため, cmakeのGNUInstallDirsを使用したいのですが, cmakeのバージョンアップは可能でしょうか?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.