我们已经配置好了 llvm 的环境。
环境配置文章 介绍+安装llvm/)
动态链接库的生成
在 mac 中动态链接库 是 .dylib
后缀的。我们也可以生成 .so
后缀的文件。
源码编译生成 动态链接库
如果我们用的是源码编译的 llvm 文件。
创建对应的项目
举例生成 Hello
的动态库
在 ~/LLVM/llvm/lib/Transforms
llvm 源码目录 lib/Transforms 中。
文件结构
Transforms 文件夹下必要的文件。
CMakeLists.txt
(文件1)Hello
(文件夹)CMakeLists.txt
(文件2)Hello.cpp
(动态库源码)
CMakeLists.txt(文件1)
文件内容
1 | add_subdirectory(Utils) |
add_subdirectory()
函数是引用外部类。从而加入到 build.
Hello文件夹
CMakeLists.txt (文件2)
内容
1 | # If we don't need RTTI or EH, there's no reason to export anything |
主要我们要用set 设置好 编译成动态库 的需要的 基础信息。但是我们要注意:
这个是定义我们要编译的 文件是 Hello.cpp
编译为动态库的名字为 LLVMHello
。
Hello.cpp
内容
1 | //===- Hello.cpp - Example code from "Writing an LLVM Pass" ---------------===// |
这个就是我们写的 llvm 的一个简单 规则。 打印 "Hello: "+F.getName()
。
这就是我们的一个结构
生成动态库
我们进入到 ~/LLVM/build
目录。 在 build 目录下运行
1 | cmake ../llvm # 运行 llvm 文件下的 CMakeLists.txt |
运行完后。我们能在 ~/LLVM/build/lib
目录下生成 LLVMHello.dylib
文件 (mac下的动态链接库)
编辑CMakeLists.txt 生成动态链接库
创建对应的项目
创建一个文件夹, 里面保存 CMakeLists.txt
(文件1)和 Hello
(文件夹)
CMakeLists.txt
(文件1)src
(文件夹)CMakeLists.txt
(文件2)hello.cpp
(动态库源码)
CMakeLists.txt 文件1
内容
1 | cmake_minimum_required(VERSION 3.16) |
解释在 代码里面
src 文件夹
CMakeLists.txt
内容
1 | add_library(HelloPass MODULE |
hello.cpp
1 |
|
编译 so文件
进入 build 文件
1 | mkdir build |
然后我们能在 /Users/0xc3m4l/CLionProjects/llvmlearn/LLVMtest/build/src
文件夹下找到我们编译的 so文件