首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏不忘初心

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

    (3)因为用了高版本libclang,其头文件与YouCompleteMe中引入的不同,导致补全和语法提示出现一些奇奇怪怪的问题,比如无法识别复杂类型的函数参数等。 这个translation_unit代表了一个编译单元,承担了直接和libclang打交道的任务,且这里开始由C++代码进行处理。 6. libclang根据上下文实现了语义补全,至于如何实现的,就与YCM关系不大了,这里暂时没有再深入研究libclang源码。 4.2 回包过程 image.png 详细说明: 7. libclang处理后,返回语义补全结果到上层。 8. 但从本质上来说,ycmd自身做的工作并不复杂,从上面的两个流程图可以看出,都是一条直线处理的逻辑,其实就是接受请求,协议转换,调用libclang,回包而已,最困难的语法解析和语义补全已经都交给libclang

    4.8K21发布于 2018-07-31
  • 来自专栏方方的杂货铺

    ClangSharp依赖的动态库编译

    ClangSharp本身依赖了llvm, 以及自己的一个libClangSharp的库, windows和linux下需要编译一下llvm和这个库, 一般来说系统没变的情况下, 直接使用已经编译好的libclang.so 关于LLVM的编译 因为我们并不直接使用clang编译代码, 而只是使用libclang来生成AST, 所以此处我们需要的产物其实是libclang.so/dll. libClangSharp, build, 即可完成相关的编译操作. 2.3 结语 以lura-tool为例 , 我们其实需要的是如下图所示的so/dll: 这里处理的是windows版, 所以是libclang.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:

    2.2K20编辑于 2022-06-01
  • 来自专栏方方的杂货铺

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

    要使用这种方式, 我们先来简单的了解一下libclang. 2. libclang和它带来的改变 libclang是llvm工具链中的一部分, 整个llvm的工作过程简单来说可以看成下图所示: 而libclang主要用于处理c++源码 -> AST 这部分的工作. 前面介绍了libclang和整个基于AST代码生成的工作原理, 但libclang的使用方式有多种, 我们应该如何选择呢? c++部分实现完成对libclang的补充封装, 与libclang一起为C#化做最底层的支持. 2. ClangSharp.Interop库完成对libclang 和 libClangSharp c++部分的bridge, 实现初步的libclang c#接口. 3.

    5.8K20编辑于 2022-11-18
  • 来自专栏方方的杂货铺

    轻松掌握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 回调和多次获取数据不便的问题了.

    1.1K31编辑于 2023-10-16
  • 来自专栏【腾讯云开发者】

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

    要使用这种方式,我们先来简单的了解一下libclang。 二、libclang和它带来的改变 libclang是llvm工具链中的一部分,整个llvm的工作过程简单来说可以看成下图所示: 而libclang主要用于处理c++源码->AST这部分的工作。 四、libclang的使用方式选择 前面介绍了libclang和整个基于AST代码生成的工作原理,但libclang的使用方式有多种,我们应该如何选择呢? 本文也会重点介绍以C#使用libclang的方式。 ClangSharp.Interop库完成对libclang和libClangSharp c++部分的bridge,实现初步的libclang c#接口。

    4.1K30编辑于 2022-06-16
  • 来自专栏黑光技术

    envoy filter 开发实践系列 3:编译 envoy 的其它方式

    tools for C/C++ developments clangd-11 - Language server that provides IDE-like features to editors libclang -11-dev - Clang library - Development package libclang-common-11-dev - Clang library - Common development package libclang-cpp11 - C++ interface to the Clang library libclang-cpp11-dev - C++ interface to the Clang library libclang1-11 - C interface to the Clang library liblldb-11 - Next generation, high-performance

    2.4K10发布于 2020-11-03
  • 来自专栏给永远比拿愉快

    Linux VIM自动提示插件安装配置

    See the YCM docs for details on how to use a user-compiled libclang. 解决办法:安装Clang,重新编译。 /install.sh –clang-completer –system-libclang

    2.8K40发布于 2019-01-22
  • 来自专栏pydata

    open toolchain on ubuntu 12.04

    llvm-snapshot.gpg.key|sudo apt-key add - 安装与llvm-3.4,clang-3.4相关的所有包: apt-get install clang-3.4 clang-3.4-doc libclang-common -3.4-dev libclang-3.4-dev libclang1-3.4 libclang1-3.4-dbg libllvm-3.4-ocaml-dev libllvm3.4 libllvm3.4

    1.3K30发布于 2018-08-02
  • 来自专栏24K纯开源

    Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

    原先按照这个说明执行了一次,但是总是在libclang.so上面出错,要不就是版本不对,要不就是根本不生成libclang.so。最后在网上找到了一个帖子,再结合官方说明编译成功的。 =~/ycm_temp/llvmsrc/lib/libclang.so $ make ycm_core 3. 这里要注意的是-DEXTERNAL_LIBCLANG_PATH这个参数,用于指定libclang.so的位置。 而这个libclang.so就是我们在编译Clang的时候生成的。因此,相关路径(也即~/ycm_temp/llvmsrc/lib/libclang.so)需要替换成自己对应的路径。 4. 这样将在~/.vim/bundle/YouCompleteMe/python/目录下自动生成两个文件(libclang.so和ycm_core.so),如下图: ?

    2K100发布于 2018-01-18
  • 来自专栏字节流动

    Native (C++) 开发中如何使用 ASan 检测内存错误

    -android.so , 32 位 libclang_rt.asan-arm-android.so ,分别拷贝两个库到 jniLibs 相应的目录下。 $0")" && pwd)" export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1 ASAN_LIB=$(ls $HERE/libclang_rt.asan -android.so │ ├── armeabi-v7a │ │ └── libclang_rt.asan-arm-android.so │ ├── x86 │ │ └── libclang_rt.asan-i686-android.so │ └── x86_64 │ └── libclang_rt.asan-x86_64-android.so └── resources └── lib

    4.3K20发布于 2021-06-09
  • 来自专栏字节流动

    NDK(C++)开发中如何使用 ASan 检测内存错误

    -android.so , 32 位 libclang_rt.asan-arm-android.so ,分别拷贝两个库到 jniLibs 相应的目录下。 $0")" && pwd)" export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1 ASAN_LIB=$(ls $HERE/libclang_rt.asan -android.so │ ├── armeabi-v7a │ │ └── libclang_rt.asan-arm-android.so │ ├── x86 │ │ └── libclang_rt.asan-i686-android.so │ └── x86_64 │ └── libclang_rt.asan-x86_64-android.so └── resources └── lib

    3.8K40发布于 2021-05-14
  • 来自专栏云计算运维

    如何用 Rust 编写一个 Linux 内核模块

    rustup component add rust-src 安装 libclang 库。libclang 被 bindgen 用做前端,用来处理 C 代码。 libclang 可以从 llvm 官方主页 下载预编译好的版本。 Rust-for-Linux/linux.git 配置内核启用 Rust 支持: Kernel hacking -> Sample kernel code -> Rust samples 构建: LIBCLANG_PATH =/path/to/libclang make -j LLVM=1 bzImage 这里我们使用 clang 作为默认的内核编译器,使用 gcc 理论上是可以的,但还处于 早期实验 阶段。

    3.9K20发布于 2021-09-06
  • 来自专栏代码GG之家

    android native内存检测方案(二)

    LOCAL_SANITIZE_DIAG := alignment bounds null unreachable integer #加入需要的库 LOCAL_SHARED_LIBRARIES += libclang_rt.asan-arm-android 官方的完整代码如下: https://github.com/google/sanitizers 检测效果 我们将 libclang_rt.asan-arm-android.so 放入手机里面 adb push 'prebuilts/clang/host/linux-x86/clang-2690385/lib64/ clang/3.8/lib/linux/libclang_rt.asan-arm-android.so

    5K100发布于 2018-02-02
  • 来自专栏酷酷的哀殿

    揭秘 @available

    其次,在**链接**阶段,clang 会自动链接一个静态库 `libclang_rt.*.a`(`/Applications/Xcode.app/Contents/Developer/Toolchains /XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.ios.a`)。 考虑到低版本系统的兼容性问题(低版本运行时没有实现函数 `_availability_version_check`),最终方案为:`@available(iOS 13.0, *)` 调用 `libclang_rt 因为 Xcode 11 中附带的静态库 `libclang_rt.*.a`包含新的方法,自然而然的可以直接编译&链接&运行。

    3.1K10发布于 2020-10-26
  • 来自专栏进击的多媒体开发

    上手 GAMES 104 课程 Pilot 游戏引擎~~

    文件不存在 解决了权限问题,如果出现 libclang.dylib No such file or directory 文件不存在的问题,直接把源码里面的 /engine/bin/macOS/ 目录下的 libclang.dylib 拷贝到 /usr/bin 就好了。

    95310编辑于 2022-05-26
  • 来自专栏Elton的技术分享博客

    C++代码编译时出现 ld: symbol(s) not found for architecture x86_64错误

    /lib/clang/3.0/lib/darwin/libclang_rt.osx.a 如果替换成clang++后,提示就变为 "/usr/bin/ld" -demangle -dynamic -arch /lib/clang/3.0/lib/darwin/libclang_rt.osx.a ----

    13.3K10发布于 2021-01-22
  • 来自专栏用户1880875的专栏

    如何用 Rust 编写一个 Linux 内核模块

    rustup component add rust-src 安装 libclang 库。libclang 被 bindgen 用做前端,用来处理 C 代码。 libclang 可以从 llvm 官方主页 下载预编译好的版本。 Rust-for-Linux/linux.git 配置内核启用 Rust 支持: Kernel hacking -> Sample kernel code -> Rust samples 构建: LIBCLANG_PATH =/path/to/libclang make -j LLVM=1 bzImage 这里我们使用 clang 作为默认的内核编译器,使用 gcc 理论上是可以的,但还处于 早期实验 阶段。

    3K40发布于 2021-09-08
  • 来自专栏西二旗一哥

    Clang - Use Xcode to make first Clang plugin

    MinSizeRel Open the generate project LLVM, choose Automatically Create Schemes and build the Clang and libClang by LLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR. add_llvm_external_project(clang-tools-extra extra) # libclang

    1.8K50发布于 2018-09-30
  • 来自专栏Java面试教程

    牛啊!性能碾压ES和Mongo的神器!

    编译 确保服务器上已安装了如下依赖包: sudo apt install build-essential llvm cmake libclang1 libclang-dev cargo 加压下载的源码

    1.3K40编辑于 2023-03-07
  • 来自专栏owent

    再度优化GCC、LLVM、Clang、libc++、libc++abi等套件的构建脚本

    我也是根据自己的需要编译并输出了大多数开发工具,甚至还有一些开发库以便二次开发(比如用libclang写工具来复用libcang的AST功能)。 lldb-server lldb-instr lldb-vscode # add_llvm_install_targets(xxx) in <llvm-project>/clang libclang-headers libclang-python-bindings libclang # add_clang_tool(xxx) in <llvm-project>/clang clang-change-namespace

    3.9K40编辑于 2023-03-06
领券