clang ++ link failure:错误:源文件无效UTF-8?

时间:2015-02-27 02:07:02

标签: c++ linker clang++

我遇到了一个有趣的问题。我正在使用

编译玩具编译器
clang++ -g -x c++ y.tab.c lex.yy.c semantic_actions.cpp -o parser -lfl

y.tab.c我包含semantic_actios.hppsemantic_actions.hpp中的内容是y.tab.c中使用的一些方法声明。编译得很好。

但是,如果我将其更改为

clang++ -c -g -x c++ semantic_actions.cpp -o semantic_actions.o
clang++ -g -x c++ y.tab.c lex.yy.c -o parser semantic_actions.o -lfl

我看到了

semantic_actions.o:1:1: error: source file is not valid UTF-8
<CF><FA><ED><FE><U+0007>
^
semantic_actions.o:1:2: error: source file is not valid UTF-8
<CF><FA><ED><FE><U+0007>
    ^
semantic_actions.o:1:3: error: source file is not valid UTF-8
<CF><FA><ED><FE><U+0007>
         ^
semantic_actions.o:1:4: error: source file is not valid UTF-8
<CF><FA><ED><FE><U+0007>
            ^
semantic_actions.o:1:5: error: expected unqualified-id
<CF><FA><ED><FE><U+0007>
                ^
semantic_actions.o:1:6: warning: null character ignored [-Wnull-    character]
<CF><FA><ED><FE><U+0007>
// and the output goes on and on

我必须错过一些非常基本的东西。我在Mac OS Yosemite上

$ clang++ --version
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix

有人可以看一下吗?谢谢!

1 个答案:

答案 0 :(得分:4)

clang++ -g -x c++ y.tab.c lex.yy.c -o parser semantic_actions.o -lfl

你告诉Clang它的所有输入都是C ++源代码(-x c++),然后你给它一个目标文件(semantic_actions.o)。 Clang告诉你semantic_actions.o不是UTF-8编码的C ++源文件。