鹅厂实习周记(二)之LLVM和C++智能指针

最近项目做出了一部分,但是LLVM真的很坑,因为每个版本LLVM的API基本都会经历一次大更改,所以基本上如果LLVM里面版本不同的代码是无法参考的,因此每次LLVM报一些奇奇怪怪的错误都没办法按照网上给的解决办法,只能自己看源码或者一点点摸索,虽然网上关于LLVM的东西也很少。下面我就说一下踩的LLVM的一些坑,还有一些LLVM的学习心得。

LLVM踩坑记

不同版本的LLVM无法进行直接参考

这个问题在开始的时候就吐槽了,但是真的真的跟坑啊!!!!虽然不同版本API会有不同这个也都能接收,但是LLVM的不同版本的不同也太大了,大到令人窒息,比如差不多功能的类在两个版本中类名直接更改了,类名更改了以后基本上类里面调用关键方法需要传入的形参也会和以前基本完全不同,再比如有的方法在一个版本可以用,在另一个方法里面就不能用。。。不说了。。。直接上代码(我看着都难受,坑了我好久好久好久好久

  • llvm::Value::dump()这是一个用来打印LLVM IR的方法, 基本上去网上找参考资料的时候都给的是这个答案,连LLVM官方文档都是这么说的,但是。。。官方用的是8.0., 我用的5.0.,5.0.*中也有这个这个方法,而且方法的注释上面还写着在GDB的debug模式下使用,但是你知道吗不论用什么调试,这个方法在这个版本中不能用。。。对。。。有这个方法答案是不能用。
    dump()方法源码.png

    如果你要用这个方法的话就会报错
    鹅厂实习周记(二)之LLVM和C++智能指针_第1张图片
    dump()报错.png

然后我各种改CMakeList都没有用。。。
在第五版中正确打印LLVM IR的方法应该是这样(F就是你在项目中构造完成的llvm::Function)

 F->print(errs());  // F就是你在项目中构造完成的llvm::Function
鹅厂实习周记(二)之LLVM和C++智能指针_第2张图片

C++智能指针回收以及使用

最近改了一个bug,这个bug困扰了我好久,是关于c++智能指针的问题,因为之前一直在用Java,所以对内存这一方面的问题了解也仅限于是JVM相关的知识。所以当用到C++的智能指针的时候出了很多问题,首先看bug

你可能感兴趣的:(鹅厂实习周记(二)之LLVM和C++智能指针)