我正在尝试使用 Ubuntu WSL 构建 GNU GCC 9.3.0 工具链,我以为我成功做到了这一点,但后来我实际上无法在 VSCode 中将其用作工具包。然后我以为我做错了什么,并尝试删除 git repo 和编译结果,然后再次执行此操作。
我已经下载了所有依赖项(我认为),因此它完全运行了所有内容,而没有说遇到错误。但是,如果您熟悉工具链的编译,并使用 WSL 来执行此操作,我们sudo apt-get install
将非常感激您提供有关应该下载什么的帮助!
我跑:
cd /mnt/c/dev
git clone git://gcc.gnu.org/git/gcc.git
git checkout releases/gcc-9.3.0
cd gcc
./configure --prefix=/mnt/c/dev/gcc-9.3 --enable-languages=c,c++
make -j20
make install
它经常会卡住,直到我重新启动才能再次运行。当它卡住时,它根本不输出任何文本,而只是显示我的输入。当我按 时Ctrl+C
,它也只显示^C
。
我想这可能意味着它正在运行,但经过很长时间它仍然卡住。这主要发生在配置或制作期间。当它被冻结时,它会永久冻结。它的新窗口也会被冻结。任务管理器 -> 终止 -> 仍然冻结。
谢谢阅读!
编辑:通过查看添加了我已安装的内容history
;
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install gmp
sudo apt-get install libdevel
sudo apt install aptitude
sudo apt install libgmp-dev
sudo apt-get install libmpc-dev
sudo apt-get upgrade
sudo apt-get install lib32gcc-12-dev
apt-get install -y build-essential python3 xorriso genext2fs mtools gnu-efi git automake autoconf wget libgmp-dev libmpfr-dev libmpc-dev flex bison texinfo dosfstools
apt-get install -y build-essential python3 xorriso genext2fs mtools gnu-efi git automake autoconf wget libgmp-dev libmpfr-dev libmpc-dev flex bison texinfo dosfstools
sudo apt install libblas-dev libatlas-base-dev
sudo apt install python3-dev
sudo apt-get install libxml2-dev libxslt1-dev
我添加了那些我认为可能安装成功的。可能有些实际上不是软件包,但最多可能只有 1-2 个。
另外在 GNU gcc git 中我使用./contrib/download_prerequisites
。
[我运行了以下命令]
将其更改为在主目录中运行~
,命令现在是;
cd ~
mkdir dev
cd dev
git clone git://gcc.gnu.org/git/gcc.git
cd gcc
git checkout releases/gcc-9.3.0
cd ..
mkdir gcc-9.3.0
cd gcc-9.3.0
./../gcc/configure --prefix=$HOME/dev/gcc-9.3.0 --enable-languages=c,c++ --disable-multilib
make -j20
make install
--disable-multilib
:collect2: error: ld returned 1 exit status configure: error: I suspect your system does not have 32-bit development libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib.
在另一台电脑上我没有遇到这个问题,我想我下载了相同的软件包,也遇到了相同的冻结效果。所以我只是假设--disable-multilib
这不是问题。
另外与冻结有些无关的是,工具链现在已下载到 中\\wsl.localhost\Ubuntu\~\dev\gcc-9.3.0\bin
,但将其添加到路径后,我仍然在 VS Code 中找不到该工具包...可能是什么问题?完成后我确实收到消息,make install
通知我尚未链接库,我需要使用libtool
或-LLIBDIR
。
❯ wsl -l -v
- 名称 州 版本
- Ubuntu 运行 2
❯ wsl --version
WSL 版本:1.2.5.0 操作系统:5.15.90.1 WSLg 版本:1.0.51 MSRDC 版本:1.2.3770 Direct3D 版本:1.608.2-61064218 DXCore 版本:10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows 版本:10.0.19045.2846
答案1
目前,它似乎就像我通过以下方式解决问题一样;
- 重新安装
- 删除所有使用 Linux 子系统路径的路径变量 (
Z:\
) - 使用 Powershell 和
wsl
命令而不是运行 Ubuntu 应用程序 - 安装库
- 移至 Linux 子系统主目录(好处:比在普通 Windows 驱动器中工作速度快得多。例如
/c/dev/...
:) - 在那里完成整个 GCC 构建过程
该流程适用于那些想要复制或遇到相同问题的人。
- 重新安装
删除 Linux 子系统: https://pureinfotech.com/remove-linux-distro-wsl/
安装Linux子系统:https://learn.microsoft.com/en-us/windows/wsl/install&https://learn.microsoft.com/en-us/windows/wsl/install-manual
第二个安装链接是更新到WSL 2并将其设置为默认版本。
- 删除所有使用 Linux 子系统路径的路径变量 (
Z:\
)
Windows -> 编辑环境变量 -> 检查用户和系统路径中是否有使用该Z:\
驱动器的条目。您的子系统可能有另一个驱动器号,我相信可以通过进入资源管理器 -> “此 PC”并向下滚动来检查。
- 使用 Powershell 和
wsl
命令而不是运行 Ubuntu 应用程序
打开 Powershell 并输入wsl
,然后按回车键即可在该 Powershell 实例中使用 WSL。可以通过输入 返回 Powershell exit
。
- 安装库
- 移至 Linux 子系统主目录(好处:比在普通 Windows 驱动器中工作速度快得多。例如
/c/dev/...
:) - 在那里完成整个 GCC 构建过程
这一切都做了很多次,最后我为此创建了一个脚本;
将其另存为scriptName.sh
,使用chmod +x /path/to/scriptName.sh
来运行脚本,然后运行它。它可以从任何地方使用 来运行/path/to/scriptName.sh
;如果它在当前目录中,您可以执行./scriptName.sh
。
#!/bin/bash
# Give permissions:
# chmod +x /path/to/scriptName.sh
# Run:
# /path/to/scriptName.sh OR cd /path/to/; ./scriptName.sh
# Download packages
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get make -y
sudo apt-get install gcc -y # not cross
sudo apt-get install g++ -y
sudo apt-get install make -y
sudo apt-get install bison -y
sudo apt-get install flex -y
sudo apt-get install gawk -y
sudo apt-get install libgmp-dev libgmp3-dev libgmpv4 -y
sudo apt-get install libmpfrc++-dev libmpfr-dev libmpfr-doc libmpfr4 libmpfr4-dbg -y
sudo apt-get install mpc libmpc-dev -y
sudo apt-get install texinfo -y # optional
sudo apt-get install libcloog-isl-dev -y # optional
sudo apt-get install build-essential -y
sudo apt-get install glibc-devel -y
sudo apt-get -y install gcc-multilib libc6-i386 -y
sudo apt-get install libz-dev -y
printf "\n\n\n\nFinished downloading packages (except for prerequisites)\n\n\n\n"
# Git repo copy and checkout
cd $HOME
mkdir dev
cd dev
printf "\n\n\n\nMoved into dev\n\n\n\n"
sudo rm -r gcc
git clone git://gcc.gnu.org/git/gcc.git
cd gcc
git checkout releases/gcc-9.3.0
printf "\n\n\n\nMoved into gcc\n\n\n\n"
# Build
./contrib/download_prerequisites
printf "\n\n\n\nFinished downloading prerequisites\n\n\n\n"
./configure \
--prefix=/usr/ \
--disable-multilib \
--with-system-zlib \
--enable-languages=c,c++
make -j$(nproc)
printf "\n\n\n\nFinished make\n\n\n\n"
sudo make install -j$(nproc)
printf "\n\n\n\nFinished make install\n\n\n\n"
脚本的注意事项是,可以注释掉sudo rm -r gcc
和,以大大减少执行时间。我对脚本进行了多次迭代,有时会遇到内部已经创建的内容的问题,因此,对配置等的更改有时会搞砸。也许只是我做错了,但我让它保留下来以确保它能正常工作。git clone git://gcc.gnu.org/git/gcc.git
/gcc/
它没有冻结,但每次运行几个小时。它可能没有解决问题,但既然它有效,那么它现在是一个解决方案。