C++ llvm的Hello pass示例的编译错误

C++ llvm的Hello pass示例的编译错误,c++,compiler-construction,llvm,C++,Compiler Construction,Llvm,我正在网页上尝试Hello pass示例。我按照说明编译(使用gcc-4.2)Hello.cpp,但我得到了编译错误: Hello.cpp:20:错误:字符串常量前应包含标识符 Hello.cpp:20:错误:字符串常量前应为“,”或“…” Hello.cpp:20:错误:在“;”之前应该有构造函数、析构函数或类型转换代币 这是行INITIALIZE\u PASS(Hello,“Hello”,“Hello World PASS”,false,false)在程序中。该计划是: #include "

我正在网页上尝试Hello pass示例。我按照说明编译(使用gcc-4.2)Hello.cpp,但我得到了编译错误:

Hello.cpp:20:错误:字符串常量前应包含标识符
Hello.cpp:20:错误:字符串常量前应为“,”或“…”
Hello.cpp:20:错误:在“;”之前应该有构造函数、析构函数或类型转换代币

这是行
INITIALIZE\u PASS(Hello,“Hello”,“Hello World PASS”,false,false)在程序中。该计划是:

#include "llvm/Pass.h"  
#include "llvm/Function.h"  
#include "llvm/Support/raw_ostream.h"

using namespace llvm;

namespace {  

 struct Hello : public FunctionPass {  
    static char ID;  
    Hello() : FunctionPass(&ID) {}  

    virtual bool runOnFunction(Function &F) {  
        errs() << "Hello: " << F.getName() << "\n";  
        return false;  
    }  
 };  

 char Hello::ID = 0;  
 INITIALIZE_PASS(Hello, "Hello", "Hello World Pass", false, false);  
}
#包括“llvm/Pass.h”
#包括“llvm/Function.h”
#包括“llvm/Support/raw_ostream.h”
使用名称空间llvm;
命名空间{
结构Hello:public FunctionPass{
静态字符ID;
Hello():FunctionPass(&ID){}
虚布尔函数runOnFunction(Function&F){

errs()这是演示代码。除了第11行之外,这应该可以正常工作,第11行应该是:

    Hello() : FunctionPass(ID) {}
我使用的是llvm v2.8,有了这个小小的改动,一切似乎都运行得很好。但我将程序重命名为其他名称,因为Hello pass已经存在


按照

中的说明操作的确,FunctionPass的构造函数a
char&
不是
char*
。看起来OP被ref/pointer语法搞糊涂了。如果他习惯了,这会有所帮助。我很受鼓舞,非常需要更多的工作示例: