当前位置: 首页 > news >正文

X86下fftw3库的编译和链接undefined reference to fftwf_malloc

X86下fftw3库的编译和链接

因为缺少ARM板卡,这几天进行了将NENO代码移植到X86的工作,没想到,在FFT这里也卡了半天的时间。比较意外,这里稍作整理

因为现在有了kimi和chatgpt,一些与编译器交互的工作轻松了不少,但还是少不了遇到困难的时候,在处理fftw3的时候,遇到

undefined reference to `fftwf_malloc'

的问题。
这里我从头到尾详细描述一下过程。

写在前面:

在ARM的toolchain中,fftw3,是其组成部分,所以不需要单独进行编译过安装。
在ununtu下,可以利用apt-get直接安装fftw3或fftw3-dev,但因为我的开发机,不能联网,我也担心出问题,所以,自己编译。

下载

在这个页面:https://github.com/FFTW/fftw3/releases
人家明确说,不要在这里下,去主站下,So, 到这里:
https://fftw.org/
转到download page:
https://fftw.org/download.html
然后我选了这个:
https://fftw.org/fftw-3.3.10.tar.gz

tar -xzvf fftw-3.3.10.tar.gz
cd fftw-3.3.10

编译

./configure --enable-float
make clean
make
sudo make install

上面,要注意这里 : ./configure --enable-float
关键的要点是 ./configure --enable-float
如查不加上这个参数,就无法得到 libfftw3f.a

root@edit:/usr/local/lib/cmake/fftw3# ls -l /usr/local/lib/libfft*
-rw-r--r-- 1 root root 2262984 Oct 31 11:32 /usr/local/lib/libfftw3.a
-rw-r--r-- 1 root root 2262984 Oct 30 17:54 /usr/local/lib/libfftw3.a.ori
-rw-r--r-- 1 root root 2252630 Oct 31 11:34 /usr/local/lib/libfftw3f.a
-rwxr-xr-x 1 root root     891 Oct 31 11:34 /usr/local/lib/libfftw3f.la
-rwxr-xr-x 1 root root     888 Oct 31 11:32 /usr/local/lib/libfftw3.la
-rw-r--r-- 1 root root   48348 Oct 31 11:32 /usr/local/lib/libfftw3_threads.a
-rwxr-xr-x 1 root root     948 Oct 31 11:32 /usr/local/lib/libfftw3_threads.la

如果不能编译出 libfftw3f.a,而只有 libfftw3.a
而程序中使用的是float计算,那么,就遇到麻烦了。
我就掉到这个坑里,因为之前正处理NEON一脑门的issues,完全没有意识到后面多个了f。
所以,背动了好一会。

如何发现和解决这个问题(这部分也有用):

  1. 第一步看到 undefined reference时,当然知道有lib没有链上。
    然后手写fftw3在CMakeList.txt中,像这样:
target_link_libraries(myproject    fftw3
)
  1. 然后了解到,这样显得不太专业,正常应当这样:
find_package(FFTW3 REQUIRED)
。。。
include_directories(${FFTW3_INCLUDE_DIR})
。。。
target_link_libraries(myproject    ${FFTW3_LIBRARIES}dft
)
  1. 但是一点作用也没有。
    然后,在CMakeList.txt中加入:
message(STATUS "FFTW3_LIBRARIES: ${FFTW3_LIBRARIES}")

打印出来,与我手工写的fftw3是一样的。

  1. 在到门外转了一会,清醒了不少。
  2. 想到用nm工具看看,是不是真的没有这个函数的symbol
    /usr/local/lib/libfftw3.a | grep fftwf_malloc
    显然输出是空,因为人家期待的是另一个库:
    /usr/local/lib/libfftw3f.a
  3. 到这我可以肯定是编译的时候,参数设置不对了。
  4. 然后得到这句:./configure --enable-float
  5. link PASS
  6. 正确的CMakeList.txt的部分:
find_package(FFTW3 REQUIRED)
。。。
include_directories(${FFTW3_INCLUDE_DIR})
。。。
target_link_libraries(myproject    ${FFTW3_LIBRARIES}fdft
)

注意后面添加了f
ls /usr/local/lib/libfftw3f.a
nm /usr/local/lib/libfftw3f.a | grep fftwf_malloc
这次输出了相关的符号。

小结

要点:./configure --enable-float


http://www.mrgr.cn/news/62500.html

相关文章:

  • Python之 turtle.circle 绘制复杂曲线解析
  • 正则表达式匹配日期格式
  • 灌区测控一体化闸门系统设计及应用
  • 零基础学西班牙语,柯桥专业小语种培训泓畅学校
  • VulkanTutorial(11·Rendering)
  • 【Python各个击破】numpy
  • 什么是ajax,为什么使用ajax?ajax都有哪些优点和缺点?
  • 006 单词倒序
  • 使用sql计算每天新增用户的ltv1、ltv2以及次留
  • 批量删除redis数据【亲测可用】
  • 校园社团信息管理:Spring Boot技术的优势与实现
  • 期货跟单、量化交易模拟演示系统
  • Abaqus自己构建材料库导入材料库
  • AUTOSAR CP中的CDD复杂驱动介绍
  • Javaweb梳理3——SQL概述+DDL语句1
  • SpringBoot旋律:打造现代Web音乐平台
  • 【专题】2024年金融数字化转型白皮书报告汇总PDF洞察(附原数据表)
  • 从“死敌”到“盟友”,英特尔和AMD世纪大“和解”!
  • 不再输入单号查快递,批量查快递单号信息的新方法,智能排序快递时效并查找时效相同的单号,一站式物流查询解决方案
  • 从零开始设计简易Queue:底层原理与实现
  • 【传知代码】检测图像P图痕迹(论文复现)
  • SpringBoot和弦:创建Web音乐网站指南
  • LeetCode每日一题3165---不包含相邻元素的子序列的最大和
  • Springboot3.3 + Mybatis / Mybatis-plus
  • Python虚拟显示器pyvirtualdisplay
  • 这个AI植物整活创意项目,操作起来没难度!