c++ - 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
问题描述
我正在为我用 C++ 编写的 Biquad Filter 类编写测试,并且我正在尝试使用 FFTWPP 标头来简化 FFTW 库的使用。我已经成功构建并运行了FFTWPP 示例,因此我可以确定 FFTW3 库已成功构建并安装在我的 Mac 上(运行 OS Catalina 10.15.5 (19F101))。我已设法将 FFTW lib 目录包含到 cmake 项目定义中,并将适当的包含路径添加到 CMAKE 文件中:
cmake_minimum_required(VERSION 3.16)
project(IIR)
set(CMAKE_CXX_STANDARD 14)
find_package(Python 3.7 COMPONENTS Development) # Used for MatplotlibPP
include_directories(.)
include_directories(./../../../fftwpp/)
include_directories(./../../../fftw-3.3.8/api/)
include_directories(./../../../matplotlib-cpp/) #Plotting
include_directories(./../../../AudioFile/) #AudiofileIO
include_directories(/usr/local/include) # contains includes for FFTW3
link_directories(.)
link_directories(/usr/local/lib)# contains binary for FFTW3
find_library(
fftw3
NAMES fftw lfftw3 libfftw3
HINTS /usr/local/lib
)
add_executable(IIR
Test_BiquadFilter.cpp)
target_link_libraries(IIR PUBLIC Python fftw3)
但是,链接器似乎无法通过 FFTWPP 标头链接符号:
[100%] Linking CXX executable IIR
Undefined symbols for architecture x86_64:
"fftwpp::ThreadBase::ThreadBase()", referenced from:
fftwpp::fftw::fftw(unsigned int, int, unsigned int, unsigned int) in Test_BiquadFilter.cpp.o
"fftwpp::fftw::maxthreads", referenced from:
_main in Test_BiquadFilter.cpp.o
fftwpp::fftw::Setup(std::__1::complex<double>*, std::__1::complex<double>*) in Test_BiquadFilter.cpp.o
"fftwpp::fftw::testseconds", referenced from:
fftwpp::fftw::time(fftw_plan_s*, fftw_plan_s*, std::__1::complex<double>*, std::__1::complex<double>*, unsigned int) in Test_BiquadFilter.cpp.o
"fftwpp::fftw::effort", referenced from:
fftwpp::rcfft1d::Plan(std::__1::complex<double>*, std::__1::complex<double>*) in Test_BiquadFilter.cpp.o
fftwpp::crfft1d::Plan(std::__1::complex<double>*, std::__1::complex<double>*) in Test_BiquadFilter.cpp.o
"fftwpp::fftw::planner", referenced from:
fftwpp::fftw::Setup(std::__1::complex<double>*, std::__1::complex<double>*) in Test_BiquadFilter.cpp.o
"fftwpp::inout", referenced from:
fftwpp::fftw::Setout(std::__1::complex<double>*, std::__1::complex<double>*) in Test_BiquadFilter.cpp.o
"fftwpp::crfft1d::threadtable", referenced from:
fftwpp::crfft1d::lookup(bool, unsigned int) in Test_BiquadFilter.cpp.o
fftwpp::crfft1d::store(bool, fftwpp::threaddata const&) in Test_BiquadFilter.cpp.o
"fftwpp::rcfft1d::threadtable", referenced from:
fftwpp::rcfft1d::lookup(bool, unsigned int) in Test_BiquadFilter.cpp.o
fftwpp::rcfft1d::store(bool, fftwpp::threaddata const&) in Test_BiquadFilter.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我是否应该将 FFTW 库与 FFTWPP 链接并将其构建为自己的库,然后将该库与我的项目链接?我知道我可能不必要地向 Cmake 项目添加了一些额外的部分,但是当以这种方式链接库时,我的 CMake 配置是否因其他原因不正确?
非常感谢,
解决方案
正如评论者对原始帖子的友好指出的那样,我的问题的答案是我没有链接到 FFTWPP。
解决方案是将 FFTWPP 作为库添加到项目中,并将该库添加到目标链接库列表中。
link_directories(./../../../fftwpp/)
find_library(
fftw3
NAMES fftw lfftw3 libfftw3
HINTS /usr/local/lib
)
add_library(fftwpp STATIC ./../../../fftwpp/fftw++.cc)
add_executable(IIR
Test_BiquadFilter.cpp)
target_link_libraries(IIR PUBLIC Python fftw3 fftwpp)
推荐阅读
- python - 我的 GUI 上的可拖动线和绘图 Matplotlib 之间的交点
- modeling - zimpl 中的广义旅行商问题
- firefox - 仅支持 https、通配符证书和域名猜测的 Firefox
- xml - 如何使用 qxmlstreamreader 读取具有 mutli 属性的结束元素?
- ruby - 需要使用 ims-lti gem 从老师端将分数发送回 LMS
- python - 将 2D 矩阵的分布向量化为 3D 矩阵
- c# - 从代码隐藏(C#、WPF)添加时,用户控件无法在 ListBox 中正确显示
- ruby - 如何配置 Safari webdriver 以使用 .pac 文件
- qt - 样式表与自定义样式冲突
- azure - 通过 Azure VM 作为客户端连接到 OpenVPN 服务器