Ubuntu 16.10上でのmpd 0.19.19+DSD patch+realtime patch適用版の作り方



5 January 2017

realtime kernelの作り方メモ に引き続き、mpd 0.19.19にnative DSDパッチとrealtimeパッチを入れた版を作るメモ。

Part 1 では、mpd 0.19系のコンパイルが旨く行かないので、mpd-0.18.23を採用したと書きました。

最新版じゃないですがmpd-0.19.19でなんとかなりました。

うまくmakeできなかったのは、ubuntu 16.10のコンパイラがgcc 6系なのが原因でした。

今回も自分向けのメモに過ぎないですが...


Webを探してみると、yanさんのrealtimeパッチは以下の二つがあるようです。

mpd-0.19git-rtopt20140327.patch
mpd-0.19git-rtopt20150418.patch

そしてlintweakerさんのnative DSD support patchは、mpd0.19.19用が最新です。
従ってmpdは0.19.19を使う事にしました。

mpd-0.19.19単体でのmakeはオッケー。
lintweakerさんのpatch当ててもmakeオッケー。

realtimeパッチは2015年版はrejが出て失敗します。
2014年版はhunkはあるものの成功します。

しかしパッチ自体は当たりますが、Ubuntu 16.10でmakeすると、以下の様なエラーで終わります。



overloadedされたGetBlockValueがambiguousだそうです。なんじゃそりゃです。

原因は、Ubuntu 16.10で採用されているgccが6系だったことの様です。
4系なら問題無く通るようですが...。 調べてみるとgcc 6系への移植の際に問題になる点らしい。

C++は良く判らんのですが、引数の型が違う同じ名前の関数?を定義できるんですね。
そして、4つほどあるGetBlockValue関数のどれを使うか曖昧で判らん!!と怒ってるらしい。
じゃ、4系ではどれを採用してcompileしてたんでしょうか??暗黙の了解があるのかな。

あー。結論としてpatchのpatchでオッケー。

# diff mpd-0.19git-rtopt20140327.patch mpd-0.19git-rtopt20140327-mustang.patch
890,891c890,893

< +#define RTOPT_DEFAULT_STACK_RESERVE ((size_t)0)
< +#define RTOPT_DEFAULT_HEAP_RESERVE ((size_t)0)
---
> +//#define RTOPT_DEFAULT_STACK_RESERVE ((size_t)0)
> +//#define RTOPT_DEFAULT_HEAP_RESERVE ((size_t)0)
> +#define RTOPT_DEFAULT_STACK_RESERVE ((unsigned)0)
> +#define RTOPT_DEFAULT_HEAP_RESERVE ((unsigned)0)

結局2か所変えるだけ。そして...喜んでたら...2015年版patchには...既にこの変更が入っていた...orz

気を取り直して...この辺のパッケージも追加で入れたのでメモ。多分、次回も忘れるので...。
# apt install libav-tools libboost-all-dev


戻る

inserted by FC2 system