在没有root权限的Linux上安装gcc

问题描述 投票:0回答:5

我可以使用公共图书馆的计算机,我想尝试一些 C++ 以及其他代码。问题是没有安装 g++,我无法使用包安装它,因为我没有 root 访问权限。是否有一种“智能”方法可以在主文件夹中创建完整的编程环境?

我安装了gcc(我可以编译C代码)。另外,我有一个一致的主文件夹。我不知道在哪里可以找到预编译的 g++,我只找到了源代码,但我不知道如何处理它。我试图要求他们安装这个,但没有成功:)

c++ linux gcc g++
5个回答
12
投票

如果您想以本地用户身份安装

GNU GSRC 提供了一种简单的方法来做到这一点

链接:http://www.gnu.org/software/gsrc/

配置完成后,只需指定以下命令:

cd gsrc
make -C pkg/gnu/gcc 
make -C pkg/gnu/gcc install

第二步也可以更改以加速 N 核系统:

make -C pkg/gnu/gcc MAKE_ARGS_PARALLEL="-jN"

11
投票

您可以使用 --prefix 参数运行配置脚本:

../gcc-4.5.0/configure --prefix=/home/foo/bar
。由于 C++ 标准库很可能与您系统上的标准库不同,因此您必须先设置
export LD_LIBRARY_PATH=/home/foo/bar/lib
,然后才能启动由该编译器编译的程序。


2
投票

有一次,很久以前(1992年左右),我买了一个没有开发环境的SCO系统,也经历过类似的事情。引导它拥有一个完整的开发环境是一个巨大的痛苦,而且一点也不容易。在系统上拥有库头文件或 gcc 将使您的工作变得更加容易。

这在很大程度上取决于图书馆对安装什么类型的东西有多讨厌。如果那里没有

gcc
,你的工作就会变得有点困难。如果那里没有 glibc 的头文件,你的工作就会困难很多。

此外,您是否在系统上获得了一个帐户,以便拥有一个从登录到登录都保持一致的主文件夹?

如果那里没有

gcc
,则需要找到 gcc/g++ 的预编译二进制文件并将其安装在某个地方。如果那里没有头文件,您需要找到这些文件的副本并将它们放在系统上。

但是,没有“标准”方法可以在您的主文件夹中安装 gcc。所有解决方案都将涉及某种手动滚动方式。

您是否询问过图书管理员,他们是否可以更改已安装的内容,因为您想学习一些编程,但只能访问他们的计算机来执行此操作?这可能是最简单的解决方案。

从你的评论看来你确实有

gcc
,如果你可以编译C代码,你就有库头文件。所以现在的问题是实际编译您自己的
g++
版本。您可能会找到一种方法来吸引系统上的包管理器将二进制包安装在系统文件夹之外的其他位置。我认为这个解决方案没有编译你自己的解决方案那么有趣,而且我认为可能还存在一些微妙的问题,因为安装的包可能期望在特定的地方找到东西,但没有在那里找到它们。

首先要做的是确保您已下载正确的 gcc 软件包源代码。找到它的地方是GNU 美国镜像页面。您想要在您选择的镜像站点上找到

gcc-4.5.0.tar.bz2
gcc-4.5.0.tar.gz
文件。它可能位于
gcc
目录和
gcc-4.5.0
子文件夹中。

下载后,您应该解压它。一般来说,您不应该在解压到的文件夹中构建 gcc。因此,创建另一个您实际上想要在标记为

gcc-build
中构建的同级文件夹。那么你想要的命令是
../gcc-4.5.0/configure --prefix=$HOME/.local --enable-languages='c c++'

gcc 确实需要安装一些其他软件包才能自行编译。您可以对这些软件包使用相同的

--prefix
行将它们安装在同一位置。 gcc 网站有一个必备软件包列表

$HOME/.local
是每用户安装的标准接受位置。


0
投票

如果你有 fakeroot,你可以使用它将 ~/some-path 设置为 root 来安装软件包。或者,您可以设置 chroot 环境来执行相同的操作。

鉴于此,您可以使用

dpkg -i package.deb
在系统上安装 gcc 软件包。您需要单独下载并安装每个软件包(例如从 debian 网站)——至少
binutils
glibc
linux-headers
gcc

如果您在另一个系统上,则需要为该系统获取正确的软件包并使用相应的软件包管理器安装它们。


0
投票

如果您需要 gcc 来安装 python 包,请在安装之前尝试以下操作:

conda install gcc gxx_linux-64
© www.soinside.com 2019 - 2024. All rights reserved.