私はcross-gccを構築する3つのサブフォルダがあるディレクトリを持っています。だからディレクトリがありますbinutils
。gcc
これはglibc
ビルドディレクトリにすぎず、そのソースは別のディレクトリにあります。すべてがうまくいった。すべてをコンパイルし、カスタムパスにインストールしました。
(マイビルドツリーの)サブディレクトリに移動しようとすると、glibc
内容を一覧表示できず、読み取れないいくつかのエラーメッセージが表示されます。
$ ls
ls: �����: ��dJ: Error 1673445588re
この操作をやり直すと、別のエラー番号が表示されます。
$ ls
ls: �vP��: ��u: Error 3137748
または特定のファイル:
$ ls config.status
ls: : ���s: Error 123785428
上記の階層の内容を一覧表示すると、次のように動作します。
$ ls glibc
Makefile catgets ctype gnu
ld.map libc.so.6 libmvec.map
...
ルートになってそのディレクトリに移動すると、次のようにリストすることもできます。
# ls
Makefile catgets ctype gnu
ld.map libc.so.6 libmvec.map
...
フォルダ自体:
$ ls -lh glibc -d
drwxr-xr-x 63 david david 4.0K 17. Aug 16:30 glibc
正しい所有者、正しい権限。
私は逃げた
# e2fsck -pfc /dev/sdb4
お金を守ってください。
ログファイルにエラーはなく、dmesg
エラーも表示されず、ファイルシステムチェックでもエラーは報告されません。これは一体何ですか?
修正する
gccを介して構築するという事実により、私の環境はこれらのライブラリやバイナリの影響を受けます。クロスコンパイルまたはcross-gccのビルド中に環境を構築するために使用されるシェルのパスを調整し、それをcross-gccのインストールパスとして指定しました。しかし、gccはそのような機能を提供せず、/bin/ls
私のLD_LIBRARY_PATH
設定もありません。このls
コマンドは私のシステムから来ます。
$ where ls
ls: aliased to ls --color=always
/bin/ls
$ ldd /bin/ls
linux-vdso.so.1 (0x00007ffea1362000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc18b429000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc18b7c2000)
他のすべてはうまくいくようです。私のシステムやこのSSD(Samsung SSD 840 EVO 500GB、EXT0DB6Q)には他の問題はありません。何度も再起動しても問題は解決しません。
私がこれまで気付いていなかったのは、このディレクトリにあると、すべてのls
コマンドが失敗し、もはやホームディレクトリを一覧表示できないことです。
$ ls ~
ls: ���e�: �i"�5: Error 18446744071861719252
毎回異なる出力:
$ ls ~
ls: Pg��: ��{
: Error 2070020308
~/cross-build/inc100/glibc # this is the path to this directory
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-
bin/5.4.0:/usr/x86_64-pc-linux-gnu/i686-pc-linux-gnu/gcc-
bin/6.4.0:/home/david/usr/bin
まあ:
~/cross-build/inc100/
$ ls glibc
.... libc.so libc.so.6
ファイルを上記のディレクトリのいずれかに移動し、そのディレクトリに移動すると機能しますlibc.so
。libc.so.backup
リンカがこのディレクトリでlibc.soを見つけて単に使用するようです。しかし、なぜechoは動作しますが、lsは動作しませんか?find
間違っています。この動作を防ぐにはどうすればよいですか?
修正する
echo
これはシェル内蔵ls
などがfind
バイナリに接続されているため動作するためlibc.so
動作が異なります。
私はなぜこのようなことが起こるのか、どうすれば回避できるのかわかりません。私はこれらの「ウィンドウモード」の動作を本当に望んでいません。
答え1
たぶんあなたのls
命令はそうではありませんか/bin/ls
?次のコマンドを使用して、ls
実際に各ディレクトリにあることを確認してください。/bin/ls
which ls
ls
このディレクトリに名前が付けられた実行可能ファイルがあり、$PATH
環境変数が/bin/ls
。