我的自建gcc 12如何知道包含gcc 12 c++头文件,而不是使用系统路径包含文件?



我有一台Ubuntu 20.04.2 LTS机器,默认有gcc 9.4.0

我从源代码构建了一个GCC-12.1.0,并编写了一个非常简单的cpp程序,并与/path_to_gcc12_bin/g++编译。

然后我运行gdb跟随,按下s,它显示程序包含gcc12的新版本c++头文件。

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

我的问题是:

/path_to_gcc12_bin/g++知道使用新版本(自己的)头文件?

我没有CPLUS_INCLUDE_PATHenv变量或任何类似的设置。

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

注:/path_to_gcc12整个目录移到其他地方,g++仍然可以正确地包含较新的头文件。


test.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

我猜gccg++都在相对目录中找到标头,相对于/path_to_gcc12/bin/gcc

无论我在哪里mvgcc12目录在我的机器。它总是可以正确地包含自己的c++头文件。

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

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

最新更新