代码之家  ›  专栏  ›  技术社区  ›  Rick Jim DeLaHunt

我自己构建的gcc12如何知道包含gcc12c++头文件,而不是使用系统路径包含文件?

  •  0
  • Rick Jim DeLaHunt  · 技术社区  · 3 年前

    我有一个 Ubuntu 20.04.2 LTS 机器和 gcc 9.4.0 默认情况下。

    我建造了一个 GCC-12.1.0 并编写了一个非常简单的cpp程序,并使用 /path_to_gcc12_bin/g++

    然后我就跑 gdb s ,并显示该程序包含更新版本 c++ 的头文件 gcc12

    共享库 libstdc++.so.6 仍然链接到系统路径一。

    我的问题是:

    如何 /路径_to_gcc12_bin/g++ 知道使用新版本(自己的)头文件吗?

    我没有 CPLUS_INCLUDE_PATH env变量或任何类似设置。

    如果我使用系统构建程序 g++ ,它将使用系统路径include文件,即 /usr/include/c++/9/bits/regex.h

    P.S。 移动 /path_to_gcc12 整个目录到其他地方, g++ 仍然可以正确地包括较新的头文件。


    测试.cpp

    #include <iostream>
    #include <regex>
    using namespace std;
    
    int main(){
        std::regex re("Get|GetValue");
        std::cmatch m;
        cout << std::regex_search("GetValue", m, re)  << endl;  // returns true, and m[0] contains "Get"
        cout << std::regex_match ("GetValue", m, re)  << endl;  // returns true, and m[0] contains "GetValue"
        cout << std::regex_search("GetValues", m, re)  << endl; // returns true, and m[0] contains "Get"
        cout << std::regex_match ("GetValues", m, re)  << endl; // returns false
    }
    
    
    tian@tian-B250M-Wind:~/GCC-12.1.0/bin$ LD_PRELOAD='/home/tian/GCC-12.1.0/lib64/libstdc++.so.6.0.30' gdb ./test
    (gdb) b 9
    Breakpoint 1 at 0x4036f7: file test.cpp, line 9.
    (gdb) r
    Starting program: /home/tian/GCC-12.1.0/bin/test 
    
    Breakpoint 1, main () at test.cpp:9
    9               cout << std::regex_search("GetValue", m, re)  << endl;  // returns true, and m[0] contains "Get"
    (gdb) s
    std::regex_search<char, std::allocator<std::__cxx11::sub_match<char const*> >, std::__cxx11::regex_traits<char> > (__s=0x42c0f6 "GetValue", __m=..., __e=..., __f=std::regex_constants::_S_default)
        at /home/tian/GCC-12.1.0/include/c++/12.1.0/bits/regex.h:2409
    2409        { return regex_search(__s, __s + _Rx_traits::length(__s), __m, __e, __f); }
    

    at /home/tian/GCC-12.1.0/include/c++/12.1.0/bits/regex.h:2409

    0 回复  |  直到 3 年前
        1
  •  0
  •   Rick Jim DeLaHunt    3 年前

    我想 gcc g++ 正在相对目录中查找标头,相对于 /path_to_gcc12/bin/gcc

    无论我在哪里 mv 我机器中的gcc12指令。它总是可以正确地包含自己的c++头文件。

    尝试 ./g++ -g -Wall --verbose -o test test.cpp 给出include路径:

    tian@tian-B250M-Wind:~/Desktop/GCC-12.1.0/bin$ ./g++ -g -Wall --verbose -o test test.cpp
    Using built-in specs.
    COLLECT_GCC=./g++
    COLLECT_LTO_WRAPPER=/home/tian/Desktop/GCC-12.1.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.1.0/lto-wrapper
    Target: x86_64-pc-linux-gnu
    Configured with: /home/tian/playground/gcc_build_play/objdir/../gcc-12.1.0/configure --prefix=/home/tian/GCC-12.1.0 --disable-multilib
    Thread model: posix
    Supported LTO compression algorithms: zlib
    gcc version 12.1.0 (GCC) 
    COLLECT_GCC_OPTIONS='-g' '-Wall' '-v' '-o' 'test' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
     /home/tian/Desktop/GCC-12.1.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.1.0/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -iprefix /home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/x86_64-pc-linux-gnu/12.1.0/ -D_GNU_SOURCE test.cpp -quiet -dumpbase test.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -g -Wall -version -o /tmp/ccrg0qhG.s
    GNU C++17 (GCC) version 12.1.0 (x86_64-pc-linux-gnu)
            compiled by GNU C version 12.1.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP
    
    GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
    ignoring nonexistent directory "/home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../x86_64-pc-linux-gnu/include"
    ignoring duplicate directory "/home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../include/c++/12.1.0"
    ignoring duplicate directory "/home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../include/c++/12.1.0/x86_64-pc-linux-gnu"
    ignoring duplicate directory "/home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../include/c++/12.1.0/backward"
    ignoring duplicate directory "/home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/12.1.0/include"
    ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
    ignoring duplicate directory "/home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed"
    ignoring nonexistent directory "/home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../x86_64-pc-linux-gnu/include"
    #include "..." search starts here:
    #include <...> search starts here:
     /home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../include/c++/12.1.0
     /home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../include/c++/12.1.0/x86_64-pc-linux-gnu
     /home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../include/c++/12.1.0/backward
     /home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/x86_64-pc-linux-gnu/12.1.0/include
     /home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed
     /usr/local/include
     /home/tian/Desktop/GCC-12.1.0/bin/../lib/gcc/../../include
     /usr/include/x86_64-linux-gnu
     /usr/include
    End of search list.
    
    

    有关的更多详细信息 https://stackoverflow.com/a/72762087/5983841