
Ubuntu日本語フォーラム

ログインしていません。
こんばんわ
懲りずにまた質問させて頂きたいと思います。
H8クロスコンパイラで、elf形式のgccを構築しようと
下記の組み合わせ(複数のサイトなどでおすすめとあったため:深い意味はないです)で
gccのコンパイルまではうまくいきました。
・binutils-2.19.1
・gcc-3.4.6
・newlib-1.18.0
ところが、sudo make installを実行すると
h8300-elf-ranlib:コマンドが見つかりません
とエラーを吐き出し止まってしまいます。
以下該当行と、その直前の行です。
/usr/bin/install -c -m 644 ./libgcc.a /usr/local/h8300-elf/lib/gcc/h8300-elf/3.4.6/ h8300-elf-ranlib /usr/local/h8300-elf/lib/gcc/h8300-elf/3.4.6/libgcc.a
因みに、configureとmakeのオプションは以下の通りです:
../configure --prefix=/usr/local/h8300-elf --target=h8300-elf --enable-languages=c --with-newlib --with-headers=/home/(user)/newlib-1.18.0/newlib/libc/include --disable-nls make CFLAGS="-O -fomit-frame-pointer" all
もちろん(今は一時的ですが)exportでPATHは通してます。
(h8300-elf-ranlib --versionでバージョン確認が出来ます)
これといった検索もかからず、また質問させて頂きます。
よろしくお願い致します。
オフライン
クロスコンパイリング環境については分かりませんが、
sudo makeでプログラムが見つからないのは、
userで$PATHを変更していても、sudo実行時には反映されないことが原因ではないでしょうか。
userの$PATHを引き継ぎたい場合は、
sudo env PATH=$PATH make install
などとすれば良いかと思います。
# 実際に使用とされていることがシステムに悪影響を与えないかは分かりませんので、別途確認願います。
# local以下なら大丈夫のような気はしますが、為念。
オフライン
一般ユーザの不用意な環境設定をスーパーユーザが引き継がないようにしておくのはセキュリティの基本です.
hmatsue さん による投稿:
sudo env PATH=$PATH make install
sudo には同様の機能があるので,2つめの env は不必要です.
もちろん有って悪いというわけではないのですが…
sudo [-AbEHnPS] [-C fd] [-g groupname|#gid] [-p prompt]
[-u username|#uid] [VAR=value] [-i | -s] [command]
Environment variables to be set for the command may also be passed on
the command line in the form of VAR=value, e.g.
LD_LIBRARY_PATH=/usr/local/pkg/lib.
オフライン
;; どうも最近言葉足らずの傾向が…
einundzwanzighundertsechs による投稿:
一般ユーザの不用意な環境設定をスーパーユーザが引き継がないようにしておくのはセキュリティの基本
だから sudo が一般ユーザの PATH 環境変数を無視しても不思議ではない.
しかし,環境変数を全く設定できないのも不便だから何か方法があるはずだ.
じゃあ,sudo のマニュアルから調べてみよう.
と,いう様に考えて欲しいですね.
オフライン
こんばんわ
いつもお世話になっております。
hmatsueさん による投稿:
sudo makeでプログラムが見つからないのは、
userで$PATHを変更していても、sudo実行時には反映されないことが原因ではないでしょうか。
userの$PATHを引き継ぎたい場合は、
sudo env PATH=$PATH make install
などとすれば良いかと思います。
ご指摘の通りで無事インストール出来ました。
どうもありがとうございます。
einundzwanzighundertsechsさん による投稿:
...セキュリティの基本です.
毎度ご回答ありがとうございます。
折角なので前回共々そのセキュリティについて
もう少しご解説と言いますか
ご教授頂けたらと思います。
(実は私がよくわかってないかもしれない(と言うかそう)ので)
いつもありがとうございます。
オフライン
専門家では無いので,技術的なことは詳しく論じられませんが,
セキュリティに対する姿勢については少し語れます.
まずは意識しながらドキュメントを読む様にしましょう.
sudo コマンドのマニュアルを開いたことは有りますか?
sudo は,権限を強化して一般ユーザでは出来ない作業をする場合に使うわけですから,セキュリティへの配慮が必要です.
それを念頭に sudo のマニュアルを流し読みすれば SECURITY NOTES の項目が目に止まるでしょう.
そこには sudo が環境変数をどう扱うかが説明されています.
全てを一度には理解できなかったとしても,「sudo は環境変数にセキュリティ上の注意を払っている」ことは読み取れるでしょう.
その知識は,-- #4 に書いたように-- 問題を解決する糸口にもなり得ます.
オフライン
T.O による投稿:
こんばんわ
懲りずにまた質問させて頂きたいと思います。
H8クロスコンパイラで、elf形式のgccを構築しようと
下記の組み合わせ(複数のサイトなどでおすすめとあったため:深い意味はないです)で
gccのコンパイルまではうまくいきました。
・binutils-2.19.1
・gcc-3.4.6
・newlib-1.18.0
ところが、sudo make installを実行するとh8300-elf-ranlib:コマンドが見つかりません
とエラーを吐き出し止まってしまいます。
クロス開発環境の構築は組み込み向けクロス開発環境の構築の手順が参考になります。
h8300-elf-ranlibというのはbinutilsのほうに入っている代物だったとおもいますので、gccやgdbなどをビルドする前にbinutilsをインストールしたPATHが通っているひつようがあります。
また(やったっことないですが)gccの$srcdir にbinutilsのソースディレクトリへシンボル張ってconfigureで--with-binutilsとか指定する方法もあるのかもしれません。
オフライン