使用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,再编译,发现问题解决了。

你可能感兴趣的:(Verilog,数字IC设计,HLS,HLS,fpga开发)