gpt4 book ai didi

c++ - 不懂 gcc --with-local-prefix, --with-native-system-header-dir=

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:24 28 4
gpt4 key购买 nike

我正在编译 gcc 并阅读来自 https://gcc.gnu.org/install/configure.html 的手册

具体说明

--with-local-prefix=dirname Specify the installation directory for local include files. The default is /usr/local. Specify this option if you want the compiler to search directory dirname/include for locally installed header files instead of /usr/local/include.

我认为这意味着当使用这个版本的 GCC 编译其他二进制文件时,它会在默认的 /usr/.../ 目录之前检查这个目录?

--with-sysroot=dir Tells GCC to consider dir as the root of a tree that contains (a subset of) the root filesystem of the target operating system. Target system headers, libraries and run-time object files will be searched for in there. More specifically, this acts as if --sysroot=dir was added to the default options of the built compiler. If you specify the --with-native-system-header-dir=dirname option then the compiler will search that directory within dirname for native system headers rather than the default /usr/include.

为了编译 GCC 5.4.0,我 yum install gcc gcc-c++(即 4.8.0)并将诸如 stdio.h 的头文件放在 /usr/包含/。在我编译 GCC 5.4.0 并指定它编译另一个二进制文件后,5.4.0 似乎使用 /usr/include/ 中的 4.8.0 header ,而不是在 5.4 期间创建的 header 。 0编译。

我真正想问的是,如果我想编译 GCC (5.4.0) 并将 make install 安装 header 以及 GCC 和 G++ 等安装到自定义文件夹中,有哪些选项我设置?我用于编译 GCC 5.4.0 的配置是否正确?

/home/myuser/gcc-5.4.0/configure --prefix=/home/gcc540 --disable-multilib --with-system-zlib --enable-languages=c,c++ --with-local-prefix=/home/myotherbin/local --with-gxx-include-dir=/home/gcc540/header
  1. --prefix=/home/gcc540 设置主目录 make install
  2. --prefix=/home/gcc540/bin make install 将安装二进制文件(gcc、g++ 等)
  3. --prefix=/home/gcc540/lib make install 将安装库
  4. --with-gxx-include-dir=/home/gcc540/headers make install 将为 --enable-languages=c 安装 header , C++
  5. --with-local-prefix=/home/otherprogs(首先在此处搜索来自其他依赖项的库和 header )即,如果我正在编译 ffmpeg,我会把 x264 header 放在这里<

那么 --with-sysroot=dir||--with-native-system-header-dir=dir 中的内容是什么?

此外,在我导出到 --with-gxx-include-dir=/home/gcc540/headers 后,我有 tr1/stdio.h,其中包括以下代码,

#include <tr1/cstdio>

这会导致错误,因为 stdio.hcstdio 都在同一个文件夹中,应该将 stdio.h 复制到父级文件夹,或者最好的做法是将 -I/home/gcc540/headers -I/home/gcc540/headers/tr1` 传递给 gcc 5.4.0?

最佳答案

--with-sysroot 选项仅在构建交叉编译器时有用:生成的构建 gcc 将知道在哪里可以找到目标平台的头文件和库(即,它将有一个--sysroot 选项的默认值)。 --with-native-system-header-dir--with-sysroot 选项的改进,允许指定目录相对 到为 --with-sysroot 指定的那个,将在其中找到 native 平台 header 。 GCC 将其自己的 header (它作为 make install 的一部分复制的 header )与操作系统本身提供的“ native ” header 区分开来,并且无论 GCC 安装如何都已经存在。

关于c++ - 不懂 gcc --with-local-prefix, --with-native-system-header-dir=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37952318/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com