Ubuntu下安装pHash库时出现`fftw_init_threads`未定义引用错误求助
解决pHash编译时
undefined reference to fftw_init_threads的问题 我之前也碰到过一模一样的问题,这个错误的根源很清晰:你的编译链接过程中没有包含FFTW3的线程支持库,fftw_init_threads是FFTW3线程扩展的专属函数,只存在于libfftw3_threads库中,但从你的编译日志能看到,当前链接命令只调用了单线程版本的libfftw3。
下面给你两种可行的解决办法:
方法一:安装FFTW3线程开发包并重新配置
首先确保你安装了FFTW3的线程开发组件,在Ubuntu终端执行:
sudo apt-get update && sudo apt-get install libfftw3-threads-dev
接着清理之前的编译残留文件,重新执行配置和编译:
make clean ./configure make
正常情况下,这一步会让configure脚本自动检测到线程库,并在后续链接时自动加入-lfftw3_threads参数。
方法二:手动修改Makefile添加线程库链接
如果方法一没生效,大概率是configure脚本没正确识别到线程库,你可以直接修改examples目录下的Makefile:
- 打开
pHash-0.2.9.6/examples/Makefile - 找到生成
test_texthash的链接命令行(对应日志里的那一行),在-lfftw3的后面加上-lfftw3_threads - 保存文件后重新执行
make
修改后的链接命令大概会是这样:
/bin/sh ../libtool --tag=CXX --mode=link g++ -O2 -ffast-math -O3 -L/usr/local/lib -lssl -lcrypto -o test_texthash test_texthash.o ../src/libpHash.la -lmpg123 -lsamplerate -lsndfile -lswscale -lavformat -lavutil -lavcodec -lpng -ljpeg -lfftw3 -lfftw3_threads
⚠️ 注意:-lfftw3_threads必须放在-lfftw3之后,链接器是按顺序查找符号的,顺序不对依然会出现找不到函数的问题。
内容的提问来源于stack exchange,提问作者Aref Riahi
相关产品推荐
相关产品推荐

