[過去ログ]
Arch Linux 18 (1002レス)
Arch Linux 18 http://mao.5ch.net/test/read.cgi/linux/1703764780/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
333: login:Penguin ころころ [sage] 2024/05/13(月) 09:18:29.70 ID:pgrGXMrf >>329 > Mozc のビルドに失敗する (プロセスが強制終了される) > ビルドが以下のようなメッセージで異常終了した場合: > > ... > /bin/sh: 1 行: xxxx 強制終了 > ... > make: *** [xxx/xxx ...] エラー 137 > ... > メモリ不足になっていないか確認してください。 > ttps://wiki.archlinux.jp/index.php/Mozc のとおり、実際にメモリ不足になると止まるように設定されているようだ。また、 > 従来はメモリー不足によりOSの応答性が著しく低下し、もしくは無反応になり、 > ユーザーはPCを強制的に再起動せざるを得ませんでした。 > この状況を改善するため「systemd-oomd」を導入し、 > システム的にメモリー不足に陥る前にユーザースペースで「OOM Killer」を実行してメモリーの空き容量を確保し、 > システムの応答性低下を緩和することになりました。 > ttps://kledgeb.blogspot.com/2022/07/ubuntu-2204-224-systemd-oomd.html とあるから、とりあえずはビンゴっぽい。そのページの下のほうに書いてあるが、一時的に停止するには > sudo systemctl stop systemd-oomd だとさ。archでも全く同じかは知らんが。 ただまあ、ビルドに8GB食うのはおかしいと思うから、多分どれかのツールがメモリリークしてるのだろうが、 ディストリ側としてはどうにもならんから、この対処なのだろう。 (普通に考えれば、これならarchWikiに一時的解除の方法を載せれば良いだけだが、 それよりはメモリ不足で諦めさせたほうがいい、という判断になっているのは、 おそらく一時的に解除してビルドした場合、実際に再起動せざるを得ないケースに遭遇することになる、ということなのだろう) というわけで、確定させたければ再起動上等で試してみるんだね。 http://mao.5ch.net/test/read.cgi/linux/1703764780/333
342: login:Penguin [sage] 2024/05/13(月) 22:56:42.87 ID:pgrGXMrf >>335 > 報告でした。 うおお偉い!まさか報告があるとは思わなかった。 まあ、インストールなんて所詮作業でしか無いから、何度やっても慣れてもほぼ無意味。 こういう引っかかったところで地道にデバッグして経験値を積み、Linuxのパワーレベル(戦闘力)を上げて行くのは正しいと思うぜ。 現状知らんので以下色々間違ってるかもしれんが、分かるところを書いておく。 まず状況を纏めると、 A. メモリ8GB, スワップ不明で、エラー(328) B. メモリ8GB, スワップ不明で、sudo systemctl stop systemd-oomd して、エラー(334) C. メモリ16GB、スワップ不明で、sudo systemctl stop systemd-oomd して、エラー(335、後半のエラー内容は328と同じだが…) でいいかな?出来ればA,B,Cにおけるスワップも教えて。 そしてもしスワップ無しで運用してて、万全を期したいなら、スワップ8-16GB程度を設定して試した方がいい。 (ただし結果は高い確率で変わらないので、面倒ならやらなくても問題ない) > ttps://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/managing_storage_devices/recommended-system-swap-space_getting-started-with-swap#doc-wrapper http://mao.5ch.net/test/read.cgi/linux/1703764780/342
343: login:Penguin [sage] 2024/05/13(月) 22:57:17.41 ID:pgrGXMrf さて上記からまず思うのは、 (a) sudo systemctl stop systemd-oomd は効いたらしい? (b) メモリは16GBでも駄目? だが、よくよく見ると、 A(328) INFO: Elapsed time: 334.405s, Critical Path: 39.55s INFO: 1055 processes: 511 internal, 544 linux-sandbox. B(334) INFO: Elapsed time: 431.637s, Critical Path: 39.20s INFO: 1148 processes: 511 internal, 637 linux-sandbox. C(335) INFO: Elapsed time: 218.061s, Critical Path: 11.59s INFO: 833 processes: 403 internal, 430 linux-sandbox. なので、多分AとCは違うところで止まってる。 最近のTurboBoostのマシンは知らんが、それでも同一マシンで流して1.5-3.4倍速になるとは思えない。 だから再度確認したほうがいいし、マジでメモリだけで1.5-3.4倍速になってるのなら普段から16GBで運用した方がいい。 (ついでに言うとB/Cはエラー前半見る限り同じ所で落ちてるが、こちらも2-3.4倍速になってる。 これも通常では考えられないので、前回のビルド結果が一部残ってたのではないかと思われるが、《configure時代なら make distclean 忘れ》 本当にメモリだけで倍速になってるのならマジで増設しとけではある) そして、プロセス多すぎ。Arch知らんがMint20.3xfceだと何もしてなければ250個程度。 バックグラウンドで何か動かしてるのなら、当然それらもメモリ食ってるので、それらの状況次第で落ちる場所も変わってきてしまう。 この場合、>>338のようなことになり、精密なデバッグには不向き。 が、まあ、archはそういうもんならそれでいいが、なら最初からメモリ多めにしておくのが無難。 http://mao.5ch.net/test/read.cgi/linux/1703764780/343
344: login:Penguin ころころ [sage] 2024/05/13(月) 22:58:29.88 ID:pgrGXMrf しかしまあここまでは所詮はデバッグ上の保険であって、これより以下が本命になる。 B,Cの前半見て分かるとおり、B,Cは明確にソースコード起因で落ちてる。 > [-Werror=maybe-uninitialized] > cc1plus: all warnings being treated as errors つまり、>>340の言うとおりで、 未初期化(っぽい)のを警告とし、cc1で警告は全てエラー扱いにしてるから落ちてる。 だからこれらを外してしまえば、少なくとも現在落ちてるところは通るようになる。 一般的な問題としては、 > cc1plus: all warnings being treated as errors であり、そもそもC言語の文化では警告上等(=警告は無視するもの)であり、 警告が一つでもあればビルドを止める、なんて運用をしてるプロジェクトはほぼ無いはず。 このスレの連中なら、(まあ普段からしまくってるのかもしれんが) nVidiaのプロプライエタリドライバのインストール時や、カーネルのアップデート時にビルドをしてるはず。 それらのログ見れば分かるが、警告なんて出まくりのはず。(でも当然動いてる) ただまあこの文化はよろしい物ではないし、だからこそC++が出て来た、というのもある。 だから今回のケースでありそうなシナリオは、 1. ソースコード作成時には「全部の警告を出し(=-Wall)、プログラマは努力して全部の警告を消す、そうしないとビルドを通さない 2. そしてリリース時のgccバージョンでは、通る。(なお>>341の言うようにこの時点でclangならclangでやらないと駄目) 3. その後、gccのバージョンが上がり、以前よりもチェックが厳しくなり、新たに警告が出る様になった。 4. なので、334,335の通り、落ちるようになってしまった。 http://mao.5ch.net/test/read.cgi/linux/1703764780/344
345: login:Penguin [sage] 2024/05/13(月) 22:59:29.22 ID:pgrGXMrf だから、解決策としては、 α:リリース時のgccバージョンでコンパイルする(通常はダウングレードすることになる) β:オプションを調整して警告無視でコンパイルする であり、archの場合はパッケージリリース時のgccバージョンが多分明確に分かるはずなので、 まずそれを調べ、 α-1:もしリリース時のgccバージョンよりも現在使用しているもののバージョンが低いのなら、アップデートしてビルドを試す。 α-2:ただし通常はダウングレードになってしまうと思われるので、こちらは面倒だからやらず、 β:オプションを調整してビルド、 になる。(つっても面倒ならgccが最新版であることを確認してβだけでいい) http://mao.5ch.net/test/read.cgi/linux/1703764780/345
346: login:Penguin [sage] 2024/05/13(月) 23:00:42.31 ID:pgrGXMrf 最近C言語やって無いので以下は勘であり間違ってるかもしれんが、 -Wはマクロであり、通常は環境変数で指定する。 configure時代は大体 CCFLAGS=-Wall みたいな指定方法だったが、今は知らん。 ただ上記も「追加」であり、「削除」はどこにどう指定するのかは分からん。 もし、パッケージビルドといってもガワ被せただけで結局configureしてるのなら、多分configure自体かそこから呼ばれるbashスクリプト内で export CCFLAGS=-Wall とかでデフォのオプションを指定してるはずだから、その辺を弄ることになる。 この場合はとりあえず grep 'maybe-uninitialized' * とかで探すことになる。 http://mao.5ch.net/test/read.cgi/linux/1703764780/346
347: login:Penguin [sage] 2024/05/13(月) 23:02:40.68 ID:pgrGXMrf -Wall :全ての警告を表示しろ、の指示 -Wunused-but-set-parameter :変数に代入してるが使ってねえじゃん馬鹿ヤロー、と警告出せ、の指示 -Wallと被ってるから意味無い?まあそのとおりだが、この辺はダブっても問題ない、というノリ そしてこの通り、全部の警告を出す=動作上は問題ないけどソースコードをもっときれいに出来るよね、も警告になる http://mao.5ch.net/test/read.cgi/linux/1703764780/347
348: login:Penguin [sage] 2024/05/13(月) 23:02:59.65 ID:pgrGXMrf だから自分でコード書くときは「全部の警告を出し、全部の警告を消す」ようにコードを整理するのが理想で、 多分このプロジェクトでもやってたんだろうが、その後gccのバージョンが上がり、新たな警告を出せるようになった場合は通らなくなる http://mao.5ch.net/test/read.cgi/linux/1703764780/348
349: login:Penguin [sage] 2024/05/13(月) 23:03:51.33 ID:pgrGXMrf -Werror=maybe-uninitialized:未初期化(かもしれない)変数を使用してたらエラーにしろ、の指示 ただ言っちゃ悪いがC言語の文法では未初期化は検出できないので、 (ある程度実績のあるプロジェクトなら)これは誤検出であり多分やりすぎなので切っていい) なので、-Werror=maybe-uninitialized は勿論消すとして、 他に > cc1plus: all warnings being treated as errors を指示してるマクロがあるはずなので、それも消してビルドを試せばいい。 これについてはエラーログの > (remaining 62 arguments skipped) の部分をとりあえず全部表示させてコピペしてくれればそれっぽいの探せるけど。 が、これも面倒なら、ググッたら > export CFLAGS="-Wno-error" > export CXXFLAGS="-Wno-error" > ttps://qiita.com/g_votte/items/36013cc54482acd608e4 > Sure, find where -Werror is set and remove that flag. Then warnings will be only warnings. > ttps://stackoverflow.com/questions/11561261/how-can-i-compile-without-warnings-being-treated-as-errors この辺参考にして。 ところで > all warnings being treated as errors ってどういう文法なんだこれ? all warnings ARE being treated as errors でAREが抜けてる気がするんだが、今更gccの連中が基本的英文法間違ってるわけ無いし、省略していいとかあったっけ? (なお俺の英語はかなりいい加減なので間違ってたらご指摘よろしく) http://mao.5ch.net/test/read.cgi/linux/1703764780/349
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.038s