安装 pHash 库时对“fftw_init_threads”的未定义引用

Posted

技术标签:

【中文标题】安装 pHash 库时对“fftw_init_threads”的未定义引用【英文标题】:Undefined reference to `fftw_init_threads' while installing pHash library 【发布时间】:2020-02-28 10:45:10 【问题描述】:

我正在尝试在 ubuntu 上安装 pHash 库,我安装了 libfftw3 和所有必需的库。当我运行 ./configure 命令时一切正常,但是当我尝试运行“make”命令时,总是出现此错误:未定义对 `fftw_init_threads' 的引用。

制作命令:

g551683@sst-p1310007fl:~/Documents/pHash-0.2.9.6$ make
make  all-recursive
make[1]: Entering directory '/home/g551683/Documents/pHash-0.2.9.6'
Making all in src
make[2]: Entering directory '/home/g551683/Documents/pHash-0.2.9.6/src'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/g551683/Documents/pHash-0.2.9.6/src'
Making all in bindings
make[2]: Entering directory '/home/g551683/Documents/pHash-0.2.9.6/bindings'
make[3]: Entering directory '/home/g551683/Documents/pHash-0.2.9.6/bindings'
make[3]: Nothing to be done for 'all-am'.
make[3]: Leaving directory '/home/g551683/Documents/pHash-0.2.9.6/bindings'
make[2]: Leaving directory '/home/g551683/Documents/pHash-0.2.9.6/bindings'
Making all in examples
make[2]: Entering directory '/home/g551683/Documents/pHash-0.2.9.6/examples'
/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
libtool: link: g++ -O2 -ffast-math -O3 -o .libs/test_texthash test_texthash.o  -L/usr/local/lib ../src/.libs/libpHash.so -lssl -lcrypto /usr/local/lib/libmpg123.so /usr/lib/x86_64-linux-gnu/libltdl.so -ldl /usr/local/lib/libsamplerate.so -lsndfile -lswscale -lavformat -lavutil -lavcodec /usr/local/lib/libpng16.so -lz /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/local/lib/libfftw3.a -lm
test_texthash.o: In function `_GLOBAL__sub_I_main':
test_texthash.cpp:(.text.startup+0x1b1): undefined reference to `fftw_init_threads'
collect2: error: ld returned 1 exit status
Makefile:323: recipe for target 'test_texthash' failed
make[2]: *** [test_texthash] Error 1
make[2]: Leaving directory '/home/g551683/Documents/pHash-0.2.9.6/examples'
Makefile:419: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/g551683/Documents/pHash-0.2.9.6'
Makefile:298: recipe for target 'all' failed
make: *** [all] Error 2

谁能帮我解决这个错误!

【问题讨论】:

【参考方案1】:

来自the documentation:

首先,使用并行复数变换的程序应在 Unix 上与 -lfftw3_threads -lfftw3 -lm 链接,如果您使用 OpenMP 编译,则应与 -lfftw3_omp -lfftw3 -lm 链接。您还需要链接到负责系统上线程的任何库(例如 GNU/Linux 上的 -lpthread)或包含启用 OpenMP 的任何编译器标志(例如带有 gcc 的 -fopenmp)。

您没有链接到这个 fftw3_threads 库,也没有链接到 pthread 库。

【讨论】:

以上是关于安装 pHash 库时对“fftw_init_threads”的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

使用 .NET 中的 pHash

使用 pHash 搜索一个巨大的图像数据库,最好的方法是啥?

C#中的pHash图像比较实现

erlang node_name phash 冲突坑

python 将phash得到的64位数据转换成BIGINT方便存储到数据库

为啥每次安装新库时都必须更新 npm?