私はフォローしましたこのチュートリアル次のコマンドを使用して ChromeOS で GCC コンパイラを有効にする方法を示します。
sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification --partitions 2
sudo mount -i -o remount,exec /home/chronos/user/
export C_INCLUDE_PATH=~/Toolchain/usr/include/
export LD_LIBRARY_PATH=~/Toolchain/usr/lib:~/Toolchain/usr/lib/binutils/armv7a-hardfloat-linux-gnueabi/2.25.1/
export PATH=$PATH:~/Toolchain/usr/armv7a-hardfloat-linux-gnueabi/gcc-bin/4.9.3/:~/Toolchain/usr/armv7a-hardfloat-linux-gnueabi/binutils-bin/2.25.1/
sudo sed -i 's/\/usr/\/home\/chronos\/user\/Toolchain\/usr/g' ~/Toolchain/usr/lib/libc.so
実行すると、シェルインスタンスが終了するまでソースファイルをコンパイルできます。後でシェルに戻ると、ソースでコンパイルしようとするすべての試行は./configure
失敗します。
インスタンスが終了した後にエクスポートされた変数が失われたようです。以前と同じコマンドを実行してみましたが、コンパイル能力が元に戻せないほど失われたようです。
このconfig.log
ストリームで次のエラーが発生します。
configure:3378: checking whether the C compiler works
configure:3400: gcc conftest.c >&5
/home/chronos/user/Toolchain/usr/armv7a-hardfloat-linux-gnueabi/binutils-bin/2.25.1/ld: cannot find /home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/usr/lib/libc_nonshared.a
collect2: error: ld returned 1 exit status
configure:3404: $? = 1
configure:3442: result: no
その過程で非常に奇妙なことが起こりました...
cannot find /home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/home/chronos/user/Toolchain/usr/lib/libc_nonshared.a
この問題を解決するために、限られたLinuxの知識をすべて使い果たしたようです。誰もが何が起こっているのかについての洞察を提供できますか?
答え1
問題は、sed
この方法で再利用しても共有オブジェクトファイルに追加され続けることです~/Toolchain/usr/lib/libc.so
。そのため、最初に実行した後にファイルパスが破損します。
パスが破損している場合は、ファイルに移動してその内容を手動でlibc.so
次のように変更してください。
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( /lib/libc.so.6 /home/chronos/user/Toolchain/usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux-armhf.so.3 ) )
問題は、シェルが閉じたときに戻った後にコンパイルを続行するには、これらのフラグを再実行することがexport
重要であることです。する迷う。シェルの初期化時にフラグを設定するより永続的な解決策が見つかるまで、これを行う必要があります~/.bashrc
。