使用HLS FFT报错: undefined reference to‘xilinx_ip_xfft_v9_1_*‘问题解决方法

最近需要用到HLS的FFT库,写了一个简单代码后编译报错:

../Vitis_HLS/hls_fft.h:670: undefined reference to 'xilinx_ip_xfft_v9_1_create_state'
../Vitis_HLS/hls_fft.h:771: undefined reference to 'xilinx_ip_xfft_v9_1_bitacc_simulate'
../Vitis_HLS/hls_fft.h:820: undefined reference to 'xilinx_ip_xfft_v9_1_destroy_state'

从hls_fft.h逐步定位到xfft_v9_1_bitacc_cmodel.h中发现这几个函数都只有声明,而找不到定义。
先去百度和Goole都搜了一下,没有相关的问题解决方法。但是受到网上仅有的一篇相关文章的启发,我在linux系统里面搜索了一下libIp_xfft_v9_1_bitacc_cmodel.so,还真让我搜到了,在这个路径下:

/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1

前面的/tools/是你安装Xilinx的文件夹,然后按照上述路径就可以找到libIp_xfft_v9_1_bitacc_cmodel.so
大喜,以为这个问题马上能解决了。然后在Makefile中添加这个路径,并加入到CFLAG中,如果你的makefile中有下面类似的代码,那你也加入到里面:

LIBVITIS_LIB := /tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1
CFLAGS += -L$(LIBVITIS_LIB) -lIp_xfft_v9_1_bitacc_cmodel
run: $(OBJ)$(ECHO_OFF) $(CC) $(CFLAGS) -I$(INCDIR) $^ -o $@ -lIp_xfft_v9_1_bitacc_cmodel

通过make进行编译,报错:

/usr/bin/ld: warning: libgmp.so.11, needed by /tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so, not found (try using -rpath or -rpath-link)
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_add'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_set_ui'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_set'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_fdiv_q_2exp'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_set_d'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_addmul'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_sub'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_init'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_clear'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_get_d'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_inits'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_mul_2exp'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_submul'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_clears'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_tstbit'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_swap'
/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libIp_xfft_v9_1_bitacc_cmodel.so: undefined reference to `__gmpz_mul'

OK, fine, 看着还好,只是缺少libgmp.so.11,我们采用老方法,先搜索一下改文件在哪:find / -name libgmp.so.11, 发现在:/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fpo_v7_0/libgmp.so.11中,我们将其软链接到libIp_xfft_v9_1_bitacc_cmodel.so所在的文件夹中:

ln -s /tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fpo_v7_0/libgmp.so.11 /tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1/libgmp.so

脚下留心:如果你软链接之后不想要这个软链接了,千万不要用rm -rf libgmp.so来删除,这样的话会把源文件也一起删除,而应该用:unlink libgmp.so

注意这里需要链接到libgmp.so,而不是libgmp.so.11。软链接完成后,需要按早上述方式将libgmp.so也加入到makefile中。

LIBVITIS_LIB := /tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1
CFLAGS += -L$(LIBVITIS_LIB) -lIp_xfft_v9_1_bitacc_cmodel -lgmp
run: $(OBJ)$(ECHO_OFF) $(CC) $(CFLAGS) -I$(INCDIR) $^ -o $@ -lIp_xfft_v9_1_bitacc_cmodel -lgmp

加入完成后,先make clean,然后重新编译,叒报错:

error while loading shared libraries: libgmp.so.11: cannot open shared object file: No such file or directory

Nice,百度,已解决:动态库加载失败:cannot open shared object file: No such file or directory,这篇文章讲了好几种方法,我依次试了一下,发现单纯进行export LD_LIBRARY_PATH没有作用,只有最后一种方法管用:

sudo vim /etc/ld.so.conf
输入o(小写的o)进入输入模式,输入动态库的绝对路径/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fft_v9_1和/tools/Xilinx/Vitis_HLS/2021.1/lnx64/tools/fpo_v7_0。注意一定要将libgmp.so.11libIp_xfft_v9_1_bitacc_cmodel.so的源文件路径都加入进来才管用!。输入完成后,按下esc键,然后输入:wq,保存并退出。

然后输入如下命令,进行更新

sudo ldconfig

重新make clean,再编译,发现问题解决了。

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

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

相关文章

Spring Boot 笔记 004 自动配置和自定义starter

003讲到了导入jar包中的方法,但其实是个半成品,别人写的jar包中的方法我要在自己的代码中去调用,非常的不方便。原则上写给别人用的jar包,人家要能直接用,而不用写注入的方法。 在springboot中会自动扫描imports文件中…

原来阿里通义千问开源并可以本地运行咯

原来阿里通义千问开源版本V1.5大模型并可以本地运行咯, 一个不错的视频介绍,可以看这里:https://www.bilibili.com/video/BV1cC41167gn/?spm_id_from333.788.recommend_more_video.10&vd_source620d2f52625a6dcff7b49ea3d9f978f3

CCUS技术概述和应用意义

1CCUS技术概述和应用意义 1.1CCUS技术概述 CCUS(碳捕集、利用与封存)技术是一项针对温室气体的减排技术,能够大幅减少使用化石燃料的温室气体排放,涵盖二氧化碳(CO2)捕集、运输、利用与封存4个环节。 在…

[Python] 深入理解列表和元组

在学习的C语言中有数组可以用来存储数据,那么在Python中是否也有这样的工具呢?接下来让可莉来给大家讲解列表和元组这两个强力工具吧~ 专栏:《Python》 blog:Keven ’ s blog 在 Python 中,列表和元组是两种常用的序列…

今日学习总结

今天在看kmp算法和复习之前学习过的内容,把之前没认真看懂的内容全部又看了一边理解了一遍。 KMP kmp算法基本的作用是查找一个字符串在另一个字符串中出现的位置(优化算法)。是对暴力算法的优化,暴力算法是在主串中一个一个向后…

Linux操作系统基础(三):虚拟机与Linux系统安装

文章目录 虚拟机与Linux系统安装 一、系统的安装方式 二、虚拟机概念 三、虚拟机的安装 四、Linux系统安装 1、解压人工智能虚拟机 2、找到解压目录中的node1.vmx 3、启动操作系统 虚拟机与Linux系统安装 一、系统的安装方式 Linux操作系统也有两种安装方式&#xf…

【Linux系统学习】3.Linux用户和权限

Linux用户和权限 1.认知root用户 1.1 root用户(超级管理员) 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大权限的账户名为:root(超级管理员) 而在前期&#…

代码随想录 Leetcode55. 跳跃游戏

题目&#xff1a; 代码(首刷自解 2024年2月9日&#xff09;&#xff1a; class Solution { public:bool canJump(vector<int>& nums) {int noz 0;for (int i nums.size() - 2; i > 0; --i) {if (nums[i] 0) {noz;continue;} else {if (nums[i] > noz) noz …

Python概率建模算法和图示

要点 Python朴素贝叶斯分类器解释概率学习示例Python概率论&#xff0c;衡量一个或多个变量相互依赖性&#xff0c;从数据中学习概率模型参数&#xff0c;贝叶斯决策论&#xff0c;信息论&#xff0c;线性代数和优化Python线性判别分析分类模型&#xff0c;逻辑回归&#xff0…

基于LightGBM的回归任务案例

在本文中&#xff0c;我们将学习先进的机器学习模型之一&#xff1a;Lightgbm。在对XGB模型进行了越来越多的改进以获得更好的性能之后&#xff0c;XGBoost是一种极限梯度提升机器&#xff0c;但通过lightgbm&#xff0c;我们可以在没有太多计算的情况下实现类似或更好的结果&a…

【QT+QGIS跨平台编译】之三十:【NetCDF+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、NetCDF介绍二、文件下载三、文件分析四、pro文件4.1 netcdf34.2 netcdf44.3 netcdf五、编译实践一、NetCDF介绍 NetCDF(Network Common Data Form)是一种用于存储和处理科学数据的文件格式和库。它提供了一种自描述、可移植和可扩展的方式来组织多维数据,并支…

动态更改 Spring 定时任务 Cron 表达式的优雅方案

1.接受说明 在 SpringBoot 项目中,我们可以通过@EnableScheduling注解开启调度任务支持,并通@Scheduled注解快速地建立一系列定时任务。 最常用的应该是第一种方式,基于Cron表达式的执行模式,因其相对来说更加灵活。 @Scheduled支持下面三种配置执行时间的方式: 1.cron(e…

力扣热题100_双指针_283_移动零

文章目录 题目链接解题思路解题代码 题目链接 283. 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,…

vscode debug无法直接查看eigen变量的问题(解决方法)

主要是给gdb添加一个Eigen相关的printer即可, 网上其他教程都搞太复杂了, 我整理成了一个仓库, 把仓库克隆下来直接运行 ./setup.sh脚本即可配置好 git clone gitgithub.com:fandesfyf/EigenGdb.git cd EigenGdb ./setup.sh 然后在vscode中重新debug即可。 效果 …

MySQL存储引擎、事务、锁、日志

存储引擎 概述 数据库存储引擎是数据库底层软件组织&#xff0c;数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存…

linux驱动工作原理

linux或者windows驱动是如何对上和对下工作的&#xff0c;请用中文回答 在Linux系统中&#xff0c;设备驱动程序通过在/dev目录下创建文件系统条目与硬件通信。应用程序通过打开这些文件来获取描述符&#xff0c;以此来与设备交互。驱动程序内部使用主次设备号来标识设备。而在…

使用Arcgis裁剪

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、掩膜提取二、随意裁剪三、裁剪 前言 因为从网站下载的是全球气候数据&#xff0c;而我们需要截取成中国部分&#xff0c;需要用到Arcgis的裁剪工具 一、掩…

对比 elasticsearch 和 mysql

https://www.cnblogs.com/darcy-yuan/category/2257608.html 最近阅读了elasticsearch的官方文档&#xff0c;学习了它的很多特性&#xff0c;发现elasticsearch和mysql有很多地方类似&#xff0c;也有很多地方不同。这里做一个对比&#xff0c;帮助大家加深对elasticsearch…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Slider组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Slider组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Slider组件 滑动条组件&#xff0c;通常用于快速调节设置值&#xff0c;如音量调…

响应式编程详解(持续更新)

响应式编程 1.多维度看全景1.1响应式编程(Reactive Programming )1.2函数式编程&#xff08;Functional Programming, 简称FP&#xff09;1.3技术演进1.4Rx是什么1.5[响应式宣言](https://www.reactivemanifesto.org/zh-CN) 2.钻进去看本质2.1名称解释(rajava)2.2观察者模式2.3…