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.mzph.cn/pingmian/58498.shtml

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

相关文章

Spring 框架环境搭建

一、环境要求 JDK版本: JDK1.7及以上版本 Spring版本: Spring5.x版本 二、新建Maven项目 1. 创建 Maven 的普通 Java 项⽬ 2.设置项目坐标 3.设置项目的Maven环境 4.设置项目的名称和存放的工作空间 三、调整项目环境 1.修改JDK版本 properties&g…

使用 BERT 和逻辑回归进行文本分类及示例验证

使用 BERT 和逻辑回归进行文本分类及示例验证 一、引言 在自然语言处理领域中,文本分类是一项至关重要的任务。本文将详细介绍如何结合 BERT 模型与逻辑回归算法来实现文本分类,并通过实际示例进行验证。 二、环境准备 为了运行本文中的代码&#xf…

第8天:数据存储-补充材料——‘User.kt‘和‘UserDao‘解读

下面是对“第8天:数据存储”该文学习的更深层次的补充材料,对 ‘User.kt’和’UserDao’ 文件的理解。 下面对’User.kt’文件中每一行进行详细解释: 这段代码定义了一个数据类User,它用于与Room数据库中的表进行交互。下面是逐句…

网络安全包含哪些方面?如何加强网络安全建设?

系统安全、应用安全、物理安全、管理安全等都属于网络安全。 从大的角度,如系统安全来看,可以理解为在系统生命周期内应用系统安全工程和系统安全管理方法,辨识系统中的隐患,并采取有效的控制措施使其危险性最小。这包括操作系统的…

隐私保护下的数据提取策略

在隐私保护下进行数据提取,需要采取一系列策略来确保个人隐私得到妥善保护,同时满足数据使用的需求。以下是一些关键的策略和方法: 一、数据最小化原则 定义:仅收集和提取必要的数据,避免收集过多的个人信息或不相关…

qt QStackedLayout详解

QStackedLayout类提供了一种布局方式,使得在同一时间内只有一个子部件(或称为页面)是可见的。这些子部件被维护在一个堆栈中,用户可以通过切换来显示不同的子部件,适合用在需要动态显示不同界面的场景,如向…

【Web前端】JavaScript 对象原型与继承机制

JavaScript 是一种动态类型的编程语言,其核心特性之一就是对象和原型链。理解原型及其工作机制对于掌握 JavaScript 的继承和对象关系非常重要。 什么是原型 每个对象都有一个内部属性 ​​[[Prototype]]​​​,这个属性指向创建该对象的构造函数的原型…

请详细介绍python三大神器:迭代器、生成器、装饰器

Python三大神器分别是迭代器、生成器和装饰器,它们都是Python高级特性,可以提高程序的效率和灵活性。 迭代器(Iterators): 迭代器是一个对象,它允许逐个访问容器中的元素,而不需要提前把容器中的…

基于YOLO11/v10/v8/v5深度学习的危险驾驶行为检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

python实战(五)——构建自己的大模型助手

一、任务目标 本文将利用大语言模型强大的对话能力,搭建一个PC端问答助手。具体来说,我们将使用API来调用我们想要的大模型,并结合Prompt让大模型根据任务类型生成对应的输出。为了更方便地调用大模型助手,我们将结合python第三方…

FPGA技术优势

在当今数字化时代,现场可编程门阵列(FPGA)因其高灵活性和强大的处理能力而广泛应用于各种行业。FPGA允许用户在单个芯片上实现大量数字逻辑,以相对较高的速度并且无需依赖传统顺序程序。这种独特的能力使得FPGA能够在许多复杂应用中脱颖而出。 FPGA的基本特性 FPGA是一种…

Android OpenGL ES详解——裁剪Scissor

目录 一、概念 二、如何使用 1、开启裁剪测试 2、关闭裁剪测试 3、指定裁剪窗口(位置和大小) 4、裁剪应用举例 三、窗口、视⼝和裁剪区域三者区别 四、源码下载 一、概念 定义1: 裁剪是OpenGL中提⾼渲染的⼀种方式,只刷新…

江协科技STM32学习- P22 实验-ADC单通道/ADC多通道

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

PostgreSQL和MySQL在MVCC

PostgreSQL和MySQL在MVCC(多版本并发控制)机制上的不同主要体现在以下几个方面: MVCC实现方式 : PostgreSQL将数据记录的多个版本保存在数据库中,当这些版本不再需要时,垃圾收集器会回收这些记录。MySQL/…

【数据结构】树-二叉树-堆(下)

🍃 如果觉得本系列文章内容还不错,欢迎订阅🚩 🎊个人主页:小编的个人主页 🎀 🎉欢迎大家点赞👍收藏⭐文章 ✌️ 🤞 🤟 🤘 🤙 👈 &…

D365 FO开发参考

FO数据库表参考 InventTable in Main - Common Data Model - Common Data Model | Microsoft Learn FO编程Query参考 Query.addDataSource Method | Microsoft Learn FO核心Enums查询 BatchStatus Enum (Microsoft.Dynamics.Ax.Xpp) | Microsoft Learn FO Function 开发参…

前端笔面试查漏补缺

面试笔试的知识总结&#xff0c;查漏补缺 一、CSS样式隔离 CSS样式隔离用于确保组件或元素的样式不会与其他组件或元素的样式发生冲突。 1.scoped css -- <style scoped> 构建工具&#xff08;vue-loader&#xff09;会在编译阶段对css特殊处理&#xff0c;给当前组…

-XSS-

链接 https://github.com/do0dl3/xss-labs 搭建过程非常容易的 搭建好之后&#xff0c;就可以点击图片开始闯关了 第一关--JS弹窗函数alert() 显示payload的长度是4 level1.php?nametest level1.php?nametest1 发现只要改变name的值就显示什么在页面上 没有什么过滤的 …

【数据结构与算法】《Java 算法宝典:探秘从排序到回溯的奇妙世界》

目录 标题&#xff1a;《Java 算法宝典&#xff1a;探秘从排序到回溯的奇妙世界》一、排序算法1、冒泡排序2、选择排序3、插入排序4、快速排序5、归并排序 二、查找算法1、线性查找2、二分查找 三、递归算法四、动态规划五、图算法1. 深度优先搜索&#xff08;DFS&#xff09;2…

sqlserver、达梦、mysql的差异

差异项sqlserver达梦mysql单行注释---- 1、-- &#xff0c;--后面带个空格 2、# 包裹对象名称&#xff0c;如表、表字段等 [tableName] "tableName"tableName表字段自增IDENTITY(1, 1)IDENTITY(1, 1)AUTO_INCREMENT二进制数据类型IMAGEIMAGE、BLOBBLOB 存储一个汉字需…