首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的自建gcc 12是如何知道包含gcc 12 c++头文件的,而不是使用系统路径包含文件?

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

Stack Overflow用户
提问于 2022-06-26 08:39:14
回答 1查看 175关注 0票数 0

我有一台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_PATH env变量或任何类似的设置。

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

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

test.cpp

代码语言:javascript
复制
#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
}
代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-26 13:46:06

我猜gccg++在相对目录中找到了相对于/path_to_gcc12/bin/gcc的标题。

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

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

代码语言:javascript
复制
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的更多细节

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72760082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档