【问题标题】:Error "Error: stray character" when using C++11使用 C++11 时出现错误“错误:杂散字符”
【发布时间】:2012-12-31 16:03:49
【问题描述】:

当我尝试在我的机器上编译以下简单的 C++11 代码时遇到了一个奇怪的问题:

#include <boost/thread/thread.hpp>

它可以使用g++ foo.cpp -o foo but chokes on g++ -c -std=c++11 foo.cpp -o foo 正常编译,但出现以下错误:

In file included from /usr/local/lib/gcc/x86_64-apple-darwin11.4.0/4.7.1/../../../../include/c++/4.7.1/functional:56:0,
             from /usr/local/lib/gcc/x86_64-apple-darwin11.4.0/4.7.1/../../../../include/c++/4.7.1/memory:81,
             from /usr/local/include/boost/config/no_tr1/memory.hpp:21,
             from /usr/local/include/boost/smart_ptr/shared_ptr.hpp:27,
             from /usr/local/include/boost/shared_ptr.hpp:17,
             from /usr/local/include/boost/thread/pthread/thread_data.hpp:10,
             from /usr/local/include/boost/thread/thread.hpp:17,
             from foo.cpp:1:
./tuple:1:1: error: stray ‘\317’ in program
./tuple:1:1: error: stray ‘\372’ in program
./tuple:1:1: error: stray ‘\355’ in program
./tuple:1:1: error: stray ‘\376’ in program
... Additional lines omitted

我很茫然。特别是因为我已经能够针对 C++11 编译其他程序而没有任何问题。有什么想法吗?

我正在运行 OS X v10.7.4 (Lion) 和 GCC 4.7.1。

【问题讨论】:

  • 嗯,奇怪。什么版本的升压?你有没有打开 tuple 看看它以什么字符开头(可能是一个 BOM)?
  • 您能确认它使用的是哪个tuple 文件,并验证它是正确的吗?如果一切都失败了,在strace 下运行 g++ 将显示它实际找到的文件...
  • @Useless:不需要stracegcc -H 将打印所有标题的路径,按照它们被包含的(递归)顺序。
  • @MSalters:也不需要-H,错误信息中有文件路径:./tuple

标签: c++ boost c++11 g++ boost-thread


【解决方案1】:

这是因为您在当前目录中有一个名为 tuple 的文件,而不是标准的 tuple 标头。可能是因为编译行中有一些-I.

错误消息中的杂散字符只是文件的第一个字节,不在允许的字符集中,以八进制表示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2023-03-07
    相关资源
    最近更新 更多