【问题标题】:local installation of gcc in home directory在主目录中本地安装 gcc
【发布时间】:2020-07-20 19:06:48
【问题描述】:

我的问题是:如何确保 gcc 默认自动找到正确的包含文件?我所做的是使用 --prefix=$HOME/.local 编译 gcc 模块分支并且它有效。接下来要尝试下一个要求:使用该新编译器安装“build2”。所以我愿意

PATH="$HOME/.local/bin:$HOME/.local/libexec/gcc/x86_64-pc-linux-gnu/11.0.0/:$PATH" LD_LIBRARY_PATH="/home/p/.local/lib64" sh build2-install-0.13.0.sh --sudo false $HOME/.local/

我收到很多关于缺少头文件的错误,例如数组、stddef.h、sstream、bits/c++config.h 和 limits.h

-I$HOME/.local/{include/c++/11.0.0/x86_64-pc-linux-gnu,include/c++/11.0.0,lib/gcc/x86_64-pc-linux-gnu/11.0.0/include,lib/gcc/x86_64-pc-linux-gnu/11.0.0/include-fixed} 添加到 g++ 选项可以解决这些问题,但我希望将这些路径内置到我的编译器中。我怎么做?我必须在 gcc 源代码中的哪些位置进行更改以使 gcc 知道它在哪里安装了所有这些标头?

编辑:我的问题的解决方法很简单:问题是 ~/.local/bin 是 ~/bin 的符号链接,所以我只需要 rm ,将 ~/bin 移动到它的位置并选择创建一个符号链接~/.local/bin 到 ~/bin。我的问题仍然存在,现在可能更具学术性:我如何强制 gcc 默认在某个位置查找标头?

【问题讨论】:

    标签: c++ linux gcc


    【解决方案1】:

    如果你使用GNU Make,你必须设置一些implicit variables

    $ export CXX=/path/to/your/installation/bin/g++
    $ export CC=/path/to/your/installation/bin/gcc
    $ export LDFLAGS="${LDFLAGS} -L /path/to/your/installation/lib64 \
                      -Wl,-rpath -Wl,/path/to/your/installation/lib64"
    

    /path/to/your/installation 是您安装gcc 的位置。

    请注意,我还导出了定义 C 编译器的 CC。此外,export LDFLAGS="${LDFLAGS} ... 可防止覆盖 LDFLAGS 以前的设置。

    加法

    OP 询问

    我如何强制 gcc 默认在某个位置查找标头

    gcc 在其安装文件夹中搜索标准库的头文件*。您可以按照here 的说明明确检查这一点。 所以不需要添加-I /path/to/your/installation来使用本地安装的headers。

    无论如何,来自man pages of g++

    CPATH 指定要搜索的目录列表,就像 用 -I 指定,但在命令行上用 -I 选项给出的任何路径之后。

    导出CPATH=... 设置默认目录来搜索标头。


    *如 cmets 中所述,gcc 似乎在相对于可执行文件 g++/gcc 的位置的路径中搜索其库,*解析最终的符号链接*。

    【讨论】:

    • 是的,我对 stack-overflow 的搜索也导致建议使用二进制文件的完整路径执行 gcc 和 g++,因此它会找到它的头文件。可悲的是,build2 明确地执行了gmake -j4 -f ./bootstrap.gmake CXX=g++,如果没有校验和测试失败,我无法轻易改变它。我想要的是每次这个用户执行 g++ 它应该使用主目录中的那个,而不需要给出完整的路径。知道在 gcc 源代码的哪个位置我可以更改程序如何找到自己的二进制文件,因此它不需要依赖它吗?
    • @user11566470 嗯,原则上是 unix searches the executables from $PATH。您确定 $PATH 设置正确吗?比如你先export PATH=...(your string above)g++ -v,你执行本地安装吗?
    • 感谢您,我被提醒如何修复它,因为我过去遇到过类似的问题:如果可执行文件的路径包含符号链接甚至更糟糕的硬链接,许多 unix 程序就会遇到麻烦......跨度>
    • "gcc 在其安装文件夹中搜索标准库的头文件。"是错的! cd; rm bin;mv .local/bin/ . ;ln -sf $HOME/bin .local/ ;$HOME/.local/bin/g++ -v delme.h 证明 gcc 没有使用 --prefix 而是解析其二进制路径中的符号链接,并突然认为已安装在 $HOME 中。例如,我得到ignoring nonexistent directory "/home/p/bin/../lib/gcc/x86_64-pc-linux-gnu/11.0.0/include"
    • @user11566470 我的意思是,如果你搞砸了安装,你就不能假装它仍然可以工作......
    猜你喜欢
    • 2018-03-30
    • 2012-09-12
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2021-10-31
    相关资源
    最近更新 更多