gentooでmozcをビルドする際に色々ハマったので、メモとして残しておきます
エラー内容
emergeでmozcをインストールする際に、fcitx5のUSEフラグをオンにしてインストールすると、以下のようなエラーが出る
[69/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj/protocol/gen/proto_out/protocol/engine_builder_proto.engine_builder.pb.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -Igen/proto_out -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -O2 -pipe -march=native -L/usr/local/lib64 -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c gen/proto_out/protocol/engine_builder.pb.cc -o obj/protocol/gen/proto_out/protocol/engine_builder_proto.engine_builder.pb.o
[70/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj.host/dictionary/file/codec.codec.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-bsuffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c ../../dictionary/file/codec.cc -o obj.host/dictionary/file/codec.codec.o
FAILED: [code=1] obj.host/dictionary/file/codec.codec.o
/usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj.host/dictionary/file/codec.codec.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c ../../dictionary/file/codec.cc -o obj.host/dictionary/file/codec.codec.o
../../dictionary/file/codec.cc: In member function ‘virtual absl::Status mozc::dictionary::DictionaryFileCodec::ReadSections(const char*, int, std::vector<mozc::dictionary::DictionaryFileSection>*) const’:
../../dictionary/file/codec.cc:129:15: error: ‘StrCat’ is not a member of ‘absl’
129 | absl::StrCat("codec.cc: Insufficient data size: ", length, " bytes"));
| ^~~~~~
../../dictionary/file/codec.cc:134:15: error: ‘StrCat’ is not a member of ‘absl’
134 | absl::StrCat("codec.cc: memory block of size ", length,
| ^~~~~~
../../dictionary/file/codec.cc:142:48: error: ‘StrCat’ is not a member of ‘absl’
142 | return absl::FailedPreconditionError(absl::StrCat(
| ^~~~~~
../../dictionary/file/codec.cc:156:42: error: ‘StrCat’ is not a member of ‘absl’
156 | return absl::OutOfRangeError(absl::StrCat(
| ^~~~~~
../../dictionary/file/codec.cc:171:42: error: ‘StrCat’ is not a member of ‘absl’
171 | return absl::OutOfRangeError(absl::StrCat(
| ^~~~~~
../../dictionary/file/codec.cc:190:48: error: ‘StrCat’ is not a member of ‘absl’
190 | return absl::FailedPreconditionError(absl::StrCat(
| ^~~~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-c++11-narrowing’ may have been intended to silence earlier diagnostics
cc1plus: note: unrecognized command-line option ‘-Wno-unnamed-type-template-args’ may have been intended to silence earlier diagnostics
cc1plus: note: unrecognized command-line option ‘-Wno-covered-switch-default’ may have been intended to silence earlier diagnostics
cc1plus: note: unrecognized command-line option ‘-Wno-inconsistent-missing-override’ may have been intended to silence earlier diagnostics
cc1plus: note: unrecognized command-line option ‘-Wno-unknown-warning-option’ may have been intended to silence earlier diagnostics
[71/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj.host/storage/louds/bit_stream.bit_stream.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c ../../storage/louds/bit_stream.cc -o obj.host/storage/louds/bit_stream.bit_stream.o
[72/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj/protocol/gen/proto_out/protocol/user_dictionary_storage_proto.user_dictionary_storage.pb.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -Igen/proto_out -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -O2 -pipe -march=native -L/usr/local/lib64 -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c gen/proto_out/protocol/user_dictionary_storage.pb.cc -o obj/protocol/gen/proto_out/protocol/user_dictionary_storage_proto.user_dictionary_storage.pb.o
[73/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj.host/base/multifile.multifile.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c ../../base/multifile.cc -o obj.host/base/multifile.multifile.o
[74/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj.host/dictionary/file/codec_factory.codec_factory.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c ../../dictionary/file/codec_factory.cc -o obj.host/dictionary/file/codec_factory.codec_factory.o
[75/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj.host/base/container/serialized_string_array.serialized_string_array.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c ../../base/container/serialized_string_array.cc -o obj.host/base/container/serialized_string_array.serialized_string_array.o
[76/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj.host/storage/louds/louds_trie_builder.louds_trie_builder.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c ../../storage/louds/louds_trie_builder.cc -o obj.host/storage/louds/louds_trie_builder.louds_trie_builder.o
[77/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj.host/storage/louds/bit_vector_based_array_builder.bit_vector_based_array_builder.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c ../../storage/louds/bit_vector_based_array_builder.cc -o obj.host/storage/louds/bit_vector_based_array_builder.bit_vector_based_array_builder.o
[78/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj/protocol/gen/proto_out/protocol/candidates_proto.candidates.pb.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -Igen/proto_out -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -O2 -pipe -march=native -L/usr/local/lib64 -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c gen/proto_out/protocol/candidates.pb.cc -o obj/protocol/gen/proto_out/protocol/candidates_proto.candidates.pb.o
[79/534] /usr/bin/x86_64-pc-linux-gnu-g++ -MMD -MF obj/protocol/gen/proto_out/protocol/config_proto.config.pb.o.d -DOS_LINUX -DMOZC_BUILD -DCHANNEL_DEV -DNDEBUG -DQT_NO_DEBUG -DMOZC_NO_LOGGING -DIGNORE_HELP_FLAG -DIGNORE_INVALID_FLAG -I/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src -Igen -Igen/proto_out -fmessage-length=0 -fno-strict-aliasing -funsigned-char -pipe -pthread -fno-omit-frame-pointer -fstack-protector --param=ssp-buffer-size=4 -Wall -Wno-char-subscripts -Wno-sign-compare -Wno-deprecated-declarations -Wwrite-strings -Wno-unknown-warning-option -Wno-inconsistent-missing-override -fPIC -fno-exceptions -Wtype-limits -O2 -pipe -march=native -L/usr/local/lib64 -Wno-deprecated -Wno-covered-switch-default -Wno-unnamed-type-template-args -Wno-c++11-narrowing -std=c++17 -c gen/proto_out/protocol/config.pb.cc -o obj/protocol/gen/proto_out/protocol/config_proto.config.pb.o
ninja: build stopped: subcommand failed.
Traceback (most recent call last):
File "/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src/build_mozc.py", line 956, in <module>
sys.exit(main())
~~~~^^
File "/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src/build_mozc.py", line 941, in main
BuildMain(cmd_opts, cmd_args)
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src/build_mozc.py", line 681, in BuildMain
BuildWithNinja(options, targets)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src/build_mozc.py", line 655, in BuildWithNinja
RunOrDie([ninja, '-j10', '-l0', '-v', '-C', build_arg, target_name])
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src/build_tools/util.py", line 91, in RunOrDie
raise RunOrDieError('\n'.join(['',
...<2 lines>...
'==========']))
build_tools.util.RunOrDieError:
==========
ERROR: ninja -j10 -l0 -v -C out_linux/Release mozc_server
==========
* ERROR: app-i18n/mozc-2.28.5029.102-r4::gentoo failed (compile phase):
* Failed to run command: /usr/bin/python3.13
*
* Call stack:
* ebuild.sh, line 136: Called src_compile
* environment, line 2375: Called edo '/usr/bin/python3.13' 'build_mozc.py' 'build' '-c' 'Release' '-v' 'server/server.gyp:mozc_server' 'unix/fcitx5/fcitx5.gyp:fcitx5-mozc' 'gui/gui.gyp:mozc_tool'
* environment, line 926: Called die
* The specific snippet of code:
* "$@" || die -n "Failed to run command: ${1}"
*
* If you need support, post the output of `emerge --info '=app-i18n/mozc-2.28.5029.102-r4::gentoo'`,
* the complete build log and the output of `emerge -pqv '=app-i18n/mozc-2.28.5029.102-r4::gentoo'`.
* The complete build log is located at '/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/temp/environment'.
* Working directory: '/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src'
* S: '/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src'
>>> Failed to emerge app-i18n/mozc-2.28.5029.102-r4, Log file:
>>> '/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/temp/build.log'
* Messages for package app-i18n/mozc-2.28.5029.102-r4:
* ERROR: app-i18n/mozc-2.28.5029.102-r4::gentoo failed (compile phase):
* Failed to run command: /usr/bin/python3.13
*
* Call stack:
* ebuild.sh, line 136: Called src_compile
* environment, line 2375: Called edo '/usr/bin/python3.13' 'build_mozc.py' 'build' '-c' 'Release' '-v' 'server/server.gyp:mozc_server' 'unix/fcitx5/fcitx5.gyp:fcitx5-mozc' 'gui/gui.gyp:mozc_tool'
* environment, line 926: Called die
* The specific snippet of code:
* "$@" || die -n "Failed to run command: ${1}"
*
* If you need support, post the output of `emerge --info '=app-i18n/mozc-2.28.5029.102-r4::gentoo'`,
* the complete build log and the output of `emerge -pqv '=app-i18n/mozc-2.28.5029.102-r4::gentoo'`.
* The complete build log is located at '/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/temp/environment'.
* Working directory: '/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src'
* S: '/var/tmp/portage/app-i18n/mozc-2.28.5029.102-r4/work/mozc-2.28.5029.102/src'
おそらく原因は、Portageのmozcが使っているabslのライブラリの使い方が古いから起こっていること
その証拠に、abslをインストールしたりしても治らなかった(冷静になって見ると、コンパイルエラーの内容がそうだった)
なので、PortageにあるMozcを使うのを諦めて、今も継続的に開発されている本家Mozcを使います
fcitx/mozcのビルド
本家Mozc(google/mozc)はfcitxのサポートをしていないので、fcitx自体がフォークしているfcitx/mozcを使います
mozcのソースコードをクローンするディレクトリに行って、以下を実行してください
git clone https://github.com/fcitx/mozc --depth 1 --recursive
cd mozc
git clone
の--depth 1
フラグは、過去のコミットログを取得しないよう指定しているのでcloneが早くなります
先程提示したコマンドが終わったら、いよいよmozcのビルドが始まります
ここでBazelを使うか、ninjaを使うかで実行するコマンドが変わります。
殆どの場合、ninjaを使用することを推奨します
依存関係の確認
少なくとも、ninja、もしくはbazeliskが必要です
ninjaをインストールする場合は、以下を実行してください
sudo emerge --ask dev-build/ninja
bazeliskの場合は、
sudo emerge --ask dev-build/bazelisk
実際にビルドする
先程述べた、ninjaまたはBazeliskがインストールされていることを確認し、以下を実行してください
また、bazeliskの場合は最後に_bazelをつけるだけです
必ずsrcディレクトリ内で実行してください!
../scripts/build_fcitx5
依存関係は先程cloneしたときのフラグで、submoduleとして一緒にクローンされているはずです
少し時間がかかりますが、お茶でも飲んで気長に待ちましょう。
私の環境では10~15分程度でした
ビルドが無事に成功した場合、次に進みましょう
mozcをインストールする
ビルドが無事に終了したら、以下のコマンドで簡単にインストールできます
bazelでビルドした方の場合は、最後に_bazelをつけてください
sudo ../scripts/install_fctitx5
sudo ../scripts/install_server
install_fcitx5でfcitx5にmozcを認識させて、install_serverでmozc言語サーバーをインストールしています
インストールが終わったら、fcitx5を再起動させて、fcitx5-configtoolでmozcを有効にしましょう。
fitx5-configtoolがインストールされていない場合、app-i18n/fcitx-configtool
をインストールすることでインストールできます。
完了
日本語入力できる嬉しさを味わいましょう!
もし、Mozcをインストールしなくていいからとりあえず日本語入力したいって方は、Anthyをインストールするのをおすすめします。
変換の精度はMozcと比べるとあまり良くありませんが、日本語入力は可能です。