首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ClangSharp依赖的动态库编译

而ClangSharp本身依赖了llvm, 以及自己的一个libClangSharp的库, windows和linux下需要编译一下llvm和这个库, 一般来说系统没变的情况下, 直接使用已经编译好的...libclang.so/dll即可, 但有些时候遇到需要升级llvm到高版本的情况, 比如说我们之前碰到的情况 , llvm9在linux下运行速度异常(Windows下10S的流程, 在linux下处理同样的任务要快...关于LLVM的编译 因为我们并不直接使用clang编译代码, 而只是使用libclang来生成AST, 所以此处我们需要的产物其实是libclang.so/dll....和libClangSharp.dll, 两个文件的目录分别在: libclang.dll: llvm\llvm-project\artifacts\install\bin\libclang.dll libClangSharp.dll...: llvm11/llvm-project/artifacts/install/lib/libclang.so (实际是libclang.so.11.1的软链) libClangSharp.so:

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

一起看看VIM著名补全插件YouCompleteMe的架构和实现

1 背景 YouCompleteMe是vim上最著名的插件之一,对于长期使用Linux和vim进行服务端开发的技术人员来说或多或少都有耳闻。...这个translation_unit代表了一个编译单元,承担了直接和libclang打交道的任务,且这里开始由C++代码进行处理。...6. libclang根据上下文实现了语义补全,至于如何实现的,就与YCM关系不大了,这里暂时没有再深入研究libclang源码。...4.2 回包过程 image.png 详细说明: 7. libclang处理后,返回语义补全结果到上层。 8....但从本质上来说,ycmd自身做的工作并不复杂,从上面的两个流程图可以看出,都是一条直线处理的逻辑,其实就是接受请求,协议转换,调用libclang,回包而已,最困难的语法解析和语义补全已经都交给libclang

4K21

C++反射 - 反射信息的自动生成

要使用这种方式, 我们先来简单的了解一下libclang. 2. libclang和它带来的改变 libclang是llvm工具链中的一部分, 整个llvm的工作过程简单来说可以看成下图所示:...前面介绍了libclang和整个基于AST代码生成的工作原理, 但libclang的使用方式有多种, 我们应该如何选择呢?...ClangSharp的编译 涉及到多平台的llvm编译, 整个过程还比较复杂, 所以这里单独成另外一篇文章 , 直接发在知乎上了, 这里给出链接 ClangSharp依赖的动态库编译, 文章中包含了Linux...c++部分实现完成对libclang的补充封装, 与libclang一起为C#化做最底层的支持. 2....ClangSharp.Interop库完成对libclang 和 libClangSharp c++部分的bridge, 实现初步的libclang c#接口. 3.

5K20

C++反射:反射信息的自动生成!

二、libclang和它带来的改变 libclang是llvm工具链中的一部分,整个llvm的工作过程简单来说可以看成下图所示: 而libclang主要用于处理c++源码->AST这部分的工作。...四、libclang的使用方式选择 前面介绍了libclang和整个基于AST代码生成的工作原理,但libclang的使用方式有多种,我们应该如何选择呢?...本文也会重点介绍以C#使用libclang的方式。...涉及到多平台的llvm编译,整个过程还比较复杂,所以这里单独成一篇文章 《ClangSharp依赖的动态库编译》(https://zhuanlan.zhihu.com/p/522301633), 文章中包含了Linux...ClangSharp.Interop库完成对libclang和libClangSharp c++部分的bridge,实现初步的libclang c#接口。

3.3K30

轻松掌握C++ AST的处理方法 - CppAst.Net使用介绍

要使用这种方式, 我们先来简单的了解一下libclang. 2.1 libclang 和它带来的改变 libclang是llvm工具链中的一部分, 整个llvm的工作过程简单来说可以看成下图所示:...像上面介绍的 CE 的方案一样, 基于 libclang 和二次编译, 我们可以在设计层面整理出一个很简洁的离线代码生成工具的流程, 但基于libclang离线工具的实际实现过程中依然还是会碰到种种问题...除了上面列的这些问题, 还有以下这些 libclang 和 C++ 复杂度本身带来的问题: 2.2 libclang 本身的 Cursor 机制带来的限制 libclang 本身是以 Cursor...所以曾经在 G6 的时候, 我们是通过 C# 来访问 libclang 的(使用 ClangSharp ), 当时我们就尝试自己在 C# 层中完整的保存了一份来自 libclang 的数据层, 当然,...这个数据层肯定也是通过 libclang 原生的回调方式一次性获取的, 这样离线工具与 libclang 的原生 AST就解耦了, 也不会有 libclang 回调和多次获取数据不便的问题了.

38120
领券