Compiling

為什麼 GCC 停止工作?

  • October 18, 2016

我按照本教程展示瞭如何在 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

一旦執行,我就可以一直編譯源文件,直到我的 shell 實例終止。一旦我稍後返回 shell,所有通過原始碼編譯的嘗試都會./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 的有限知識來解決這個問題。有沒有人能夠提供一些關於發生了什麼的見解?

問題是當你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 ) )

麻煩的是,當 shell 關閉時,如果您希望在返回後繼續編譯,則必須重新執行export標誌,因為這些標誌確實會失去,這一點很重要。您需要這樣做,直到您尋求一個更永久的解決方案,該解決方案在 shell 初始化時建立標誌,即 via ~/.bashrc

引用自:https://unix.stackexchange.com/questions/317185