【发布时间】:2016-06-21 18:47:59
【问题描述】:
我正在编译 gcc 并从https://gcc.gnu.org/install/configure.html阅读手册
具体说明
--with-local-prefix=dirname 指定本地包含文件的安装目录。默认为 /usr/local。指定此选项,如果 您希望编译器在本地搜索目录 dirname/include 安装了头文件而不是 /usr/local/include。
我认为这意味着当使用这个版本的 GCC 编译其他二进制文件时,它会在默认的 /usr/.../ 目录之前检查这个目录?
--with-sysroot=dir 告诉 GCC 将 dir 视为包含目标根文件系统(的子集)的树的根 操作系统。目标系统头文件、库和运行时对象 将在那里搜索文件。更具体地说,这充当 如果 --sysroot=dir 被添加到构建的默认选项中 编译器。 如果您指定 --with-native-system-header-dir=dirname 选项,那么 编译器将在 dirname 中的该目录中搜索 native 系统头文件而不是默认的 /usr/include。
要编译 GCC 5.4.0 我 yum install gcc gcc-c++(即 4.8.0),这会将诸如 stdio.h 之类的标头放在 /usr/include/ 中。在我编译了 GCC 5.4.0 并指定它来编译另一个二进制文件后,5.4.0 似乎使用了 /usr/include/ 中的 4.8.0 头文件,而不是在 5.4.0 编译期间创建的头文件。
我真正要问的是,如果我想编译 GCC (5.4.0) 并将 make install 安装头文件以及 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
-
--prefix=/home/gcc540设置主目录make install -
--prefix=/home/gcc540/binmake install将安装二进制文件(gcc、g++ 等) -
--prefix=/home/gcc540/libmake install将安装库 -
--with-gxx-include-dir=/home/gcc540/headersmake install将为--enable-languages=c,c++安装标头 -
--with-local-prefix=/home/otherprogs(首先在此处搜索来自其他依赖项的库、头文件)即,如果我正在编译 ffmpeg,我将在此处放置 x264 头文件
那么--with-sysroot=dir||--with-native-system-header-dir=dirn 中发生了什么?
此外,在我导出到--with-gxx-include-dir=/home/gcc540/headers 后,我有tr1/stdio.h,其中包含以下代码,
#include <tr1/cstdio>
这会导致错误,因为 stdio.h 和 cstdio 都在同一个文件夹中,应该将 stdio.h 复制到父文件夹,或者最好只传递 -I/home/gcc540/headers -I/home/gcc540 /headers/tr1` 到 gcc 5.4.0?
【问题讨论】: