【问题标题】:C++ header files are not being found找不到 C++ 头文件
【发布时间】:2016-03-13 02:52:55
【问题描述】:

上下文:我正在为嵌入式板构建一些代码。它要求安装 Xilinx 工具、Linaro 工具链,然后调用开发板构建目录中的 setup bash 脚本(我们称之为 setup.sh)。

如果我不运行 setup.sh ,我可以构建一个较低级别的库,它有自己的配置脚本 (./configure),它调用通常的 ./bootstrap 脚本。在这种情况下 ./bootstrap ,在这种情况下 g++ 表示它可以找到 sstream (C++ 流标头)。好的。很好。

当我运行 setup.sh 脚本(在顶层)时,g++ 然后说它找不到 sstream。所以不知何故 g++ 环境以某种方式改变了,这就是我想要弄清楚的。

这个错误情况下的输出是

g++ has streams in std:: namespace
g++ does not have sstream
g++ does not have strstream.h
g++ does not have strstrea.h

我正在尝试调试它以找出 g++ 认为它在做什么以及为什么它找不到 sstream 标头。有哪些方法可以查看 g++ 包含和 libstdc++ 库路径设置的内容?哪些环境变量控制 gcc/g++ 的行为?

#

【问题讨论】:

    标签: c++ bash environment-variables


    【解决方案1】:

    如果我没记错的话,Xilinx 在他们的产品中附带了他们自己的 gcc 工具链。

    只需添加-I 编译文件以指向正确的包含路径。 尝试在 Xilinx 的/opt 路径中搜索头文件,这样就不会出现头文件版本和库版本不匹配的情况。

    Makefile 常用的环境变量是:

    # C Compiler: GNU C Compiler
    CC = gcc    
    # Linker: GNU Linker
    LD = ld    
    # C++ Compiler: GNU C++ Compiler
    CPP = g++
    

    也检查一下

    CFLAGS
    CPPFLAGS
    LDFLAGS
    

    执行 setup.sh 后检查是否设置了 $CC。

    【讨论】:

    • 感谢您的回复。我会看看这些地方。我想知道标题和包含在哪里被重新定义。我还试图弄清楚安装脚本在做什么,从而导致 gcc 以不同的方式搜索脚本。
    • 是的...我发现了一个问题。看起来它正在寻找赛灵思的东西而不是标准的 gcc 东西...... ./a.out ./a.out: /opt/Xilinx/Vivado/2015.4/lib/lnx64.o/libstdc++.so.6:找不到版本“GLIBCXX_3.4.21”(./a.out 要求)
    • 我有/不确定的问题是 g++ 是否在 $PATH 中搜索 libstdc++ ...
    • gcc 链接器在多个位置查找库:[editing...] 在编译 gcc 时硬编码的默认路径上(在您的情况下可能是 /opt 路径),然后是 env 变量 LIBRARY_PATH 和-L 标志传递的路径... elf 二进制文件将具有指向它在编译时链接到的二进制文件的硬编码路径。如果找不到它,它将尝试在 LD_LIBRARY_PATH 上搜索该库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2012-08-27
    相关资源
    最近更新 更多