解决编译llvm IR文件相关报错:ld: library not found for -lzstd

使用clang++编译cpp程序:

#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Verifier.h"using namespace llvm;int main() {LLVMContext context;Module *module = new Module("test", context);IRBuilder<> builder(context);// 创建一个函数llvm::Function *func = llvm::Function::Create(llvm::FunctionType::get(builder.getInt32Ty(), false),llvm::Function::ExternalLinkage,"main",module);verifyFunction(*func);module->dump();return 0;}

编译命令:

clang++ -O3 `llvm-config --cxxflags --ldflags --system-libs --libs core` -o toy

LLVM IR 编译时报错:

(base) liushanlin@192 chapter2 % make                            
clang++ -O3 -I/Users/liushanlin/cpp_directory/llvm-project/llvm/include -I/Users/liushanlin/cpp_directory/llvm-project/build/include -std=c++17   -fno-exceptions -funwind-tables -fno-rtti -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_LIBCPP_ENABLE_HARDENED_MODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS emit_module.cpp -L/Users/liushanlin/cpp_directory/llvm-project/build/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVMCore -lLLVMRemarks -lLLVMBitstreamReader -lLLVMBinaryFormat -lLLVMTargetParser -lLLVMSupport -lLLVMDemangle -lm -lz -lzstd -lcurses -lxml2 -o emit_module
ld: library not found for -lzstd
clang: error: linker command failed with exit code 1 (use -v to see invocation)

报错原因:由于llvm-config --system-libs命令会使得编译选项加上-lzstd 也就是需要链接zstd这个库,zstd是一种开源无损数据压缩算法。

所以可能的原因只有两种:

  1. 系统中没有安装
  2. LIBRARY_PATH中没有zstd库所在的路径,所以在链接的时候找不到这个库

针对原因1,只需要安装zstd库即可:

# ubuntu
apt-get update
apt-get libzstd-dev# macos
homebrew install zstd

针对原因2,解决方法:

# 找到库位置
(base) liushanlin@192 chapter2 % locate zstd
/opt/homebrew/lib/cmake/zstd
/opt/homebrew/lib/libzstd.1.5.2.dylib
/opt/homebrew/lib/libzstd.1.dylib
/opt/homebrew/lib/libzstd.a
/opt/homebrew/lib/libzstd.dylib
/opt/homebrew/lib/pkgconfig/libzstd.pc
/opt/homebrew/opt/pzstd
/opt/homebrew/opt/zstd# 在~/.bashrc文件中将zstd库所在路径添加
vim ~/.bashrc# 添加下面的内容
export LIBRARY_PATH="$LIBRARY_PATH:/opt/homebrew/lib/"

再次编译,即可成功。

注:确实其他库文件也可以使用相同方法解决,该方法不仅仅针对 zstd库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/52936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt专栏】实现单例程序,禁止程序多开的几种方式

目录 一&#xff0c;简要介绍 二&#xff0c;实现示例&#xff08;Windows&#xff09; 1.使用系统级别的互斥机制 2.通过共享内存&#xff08;进程间通信-IPC&#xff09; 3.使用命名互斥锁&#xff08;不推荐&#xff09; 4.使用文件锁 5.通过网络端口检测 一&#xf…

LLM提示词工程和提示词工程师Prompting and prompt engineering

你输入模型的文本被称为提示&#xff0c;生成文本的行为被称为推断&#xff0c;输出文本被称为完成。用于提示的文本或可用的内存的全部量被称为上下文窗口。尽管这里的示例显示模型表现良好&#xff0c;但你经常会遇到模型在第一次尝试时无法产生你想要的结果的情况。你可能需…

文件服务器实现方式汇总

hello&#xff0c;伙伴们&#xff0c;大家好&#xff0c;今天这一期shigen来给大家推荐几款可以一键实现文件浏览器的工具&#xff0c;让你轻松的实现文件服务器和内网的文件传输、预览。 基于node 本次推荐的是http-server&#xff0c; 它的githuab地址是&#xff1a;http-s…

4种方法实现html 页面内锚点定位及跳转

使用scrollIntoView进行锚点定位效果 不知道你有没有遇到这样的需求&#xff1a;锚点定位&#xff1f;进入页面某个元素需要出现在可视区&#xff1f;…这一类的需求归根结底就是处理元素与可视区域的关系。我接触了很多前端小伙伴&#xff0c;实现的方式有各种各样的&#xff…

Spring 与【MyBatis 】和【 pageHelper分页插件 】整合

目录 一、Spring整合MyBatis 1. 导入pom依赖 2. 利用mybatis逆向工程生成模型层层代码 3. 编写配置文件 4. 注解式开发 5. 编写Junit测试类 二、AOP整合pageHelper分页插件 1. 创建一个AOP切面 2. Around("execution(* *..*xxx.*xxx(..))") 表达式解析 3. 编…

【案例教程】高分论文密码:大尺度空间模拟预测与数字制图

尺度空间模拟预测和数字制图技术和不确定性分析广泛应用于高分SCI论文之中&#xff0c;号称高分论文密码。大尺度模拟技术可以从不同时空尺度阐明农业生态环境领域的内在机理和时空变化规律&#xff0c;又可以为复杂的机理过程模型大尺度模拟提供技术基础。在本次培训中&#x…

Rust安全之数值

文章目录 数值溢出 数值溢出 编译通过,运行失败 cargo run 1 fn main() {let mut arg std::env::args().skip(1).map(|x| x.parse::<i32>().unwrap()).next().unwrap();let m_i i32::MAX - 1;let a m_i arg;println!("{:?}", a); }thread main panicked…

Netty核心源码解析(三)--NioEventLoop

NioEventLoop介绍 NioEventLoop继承SingleThreadEventLoop,核心是一个单例线程池,可以理解为单线程,这也是Netty解决线程并发问题的最根本思路--同一个channel连接上的IO事件只由一个线程来处理,NioEventLoop中的单例线程池轮询事件队列,有新的IO事件或者用户提交的task时便执…

2023谷歌开发者大会直播大纲「初稿」

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

【java】【idea2023版】Springboot模块没有.iml文件的问题

目录 方法一&#xff1a; 1、首先鼠标选中对应的对应的模块 &#xff0c;按两下Ctrl键 2、project中选择对应的模块 3、运行mvn idea:module 命令​编辑 方法二&#xff1a; 1、可以右键点击open Terminal 2、然后在打开的Terminal里输入 方法一&#xff1a; 1、首先鼠…

【Rust】Rust学习 第十八章模式用来匹配值的结构

模式是 Rust 中特殊的语法&#xff0c;它用来匹配类型中的结构&#xff0c;无论类型是简单还是复杂。结合使用模式和 match 表达式以及其他结构可以提供更多对程序控制流的支配权。模式由如下一些内容组合而成&#xff1a; 字面值解构的数组、枚举、结构体或者元组变量通配符占…

leetcode做题笔记99. 恢复二叉搜索树

给你二叉搜索树的根节点 root &#xff0c;该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下&#xff0c;恢复这棵树 。 思路一&#xff1a;模拟题意 int midOrder(struct TreeNode **pre, struct TreeNode **err1, struct TreeNode **err2, struct TreeNo…

python VTK PyQt5 VTK环境搭建 创建 渲染窗口及三维模型,包含 三维模型交互;

目录 Part1. VTK 介绍 Part2. PyQt5 VTK环境搭建 安装Anaconda 自带Python Anaconda下载 安装PyQt5 安装 VTK Part3 :PyQt VTK 结合样例: Part1. VTK 介绍 VTK&#xff08;visualization toolkit&#xff09;是一个开源的免费软件系统&#xff0c;主要用于三维计算机图形…

C# 服务HTTPS 对 请求被中止: 未能创建 SSL/TLS 安全通道报错

1.如果windows支持HTTPS的TLS协议&#xff0c;则可以直接跳过 &#xff08;Tls12&#xff09; [WebMethod(Description "获取HttpsPost加密服务.")] public string HTTPSPOST(String input,String sUrl) { Log.Add("ReceiveNotice", &qu…

数字孪生赋能工业制造,为制造业带来新机遇与挑战

数字孪生技术是利用模拟仿真技术将实体对象数字化的技术。它基于虚拟现实、人工智能和云计算等技术&#xff0c;能够创建与真实物体相同的数字模型&#xff0c;并通过实时监测和分析手段&#xff0c;为制造企业提供关于该物体的全面数据&#xff0c;从而优化产品开发和生产过程…

Python如何操作网络爬虫

Python是一种非常强大的编程语言&#xff0c;用于网络爬虫操作也非常方便。Python提供了许多用于构建和操作网络爬虫的库和工具&#xff0c;如BeautifulSoup、Scrapy、Requests等。本文将详细介绍Python如何操作网络爬虫。 一、安装相关库 首先&#xff0c;我们需要安装Python…

几个nlp的小任务(序列标注)

几个nlp的小任务(序列标注) 安装一个 评估的库序列标注的介绍初始化参数加载数据集查看数据集编码选出示例展示数据预处理类,转token判断是否为 transformers.PreTrainedTokenizerFast类型继续分割word介绍对齐解决对齐对数据集进行批量预处理微调预处理模型设置 参数args使…

数据结构双向链表

Hello&#xff0c;好久不见&#xff0c;今天我们讲链表的双向链表&#xff0c;这是一个很厉害的链表&#xff0c;带头双向且循环&#xff0c;学了这个链表&#xff0c;你会发现顺序表的头插头删不再是一个麻烦问题&#xff0c;单链表的尾插尾删也变得简单起来了&#xff0c;那废…

jvm——内存模型

1.java内存模型 1.1 原子性 1.2 问题分析 这里与局部变量自增不同&#xff0c;局部变量调用iinc是在局部变量表槽位上进行自增。 静态变量是在操作数栈自增。 这里的主内存和工作内存时再JMM里的说法。 因为操作系统是时间片切换的多个线程轮流使用CPU. 1.3解决方法 JMM中…

【uniapp 监听键盘弹起与收回】

在uniapp中&#xff0c;可以通过使用小程序提供的API来监听键盘弹起与收回。 首先&#xff0c;在页面的onLoad函数中注册监听事件&#xff1a; onLoad() {uni.onKeyboardHeightChange(this.onKeyboardHeightChange); },然后&#xff0c;在页面的onUnload函数中取消注册监听事…