我想在我的 C++ 程序中使用 fftw。 为此,我在
--download-fftw
选项旁边安装了 petsc,因为我将来也想使用 Petsc。我只是下载了最新的稳定版本,使用相应的选项运行 ./configure
然后 make
-> sudo make install
文件现在位于
/usr/local/petsc
,其中包含以下fftw文件:
$ ls /usr/local/petsc/include/
...
fftw3-mpi.f03
fftw3-mpi.h
fftw3.f
fftw3.f03
fftw3.h
fftw3l-mpi.f03
fftw3l.f03
fftw3q.f03
...
$ ls /usr/local/petsc/lib/
...
libfftw3.a
libfftw3.la
libfftw3.so
libfftw3.so.3
libfftw3.so.3.6.10
libfftw3_mpi.a
libfftw3_mpi.la
libfftw3_mpi.so
libfftw3_mpi.so.3
libfftw3_mpi.so.3.6.10
...
然后我为我的项目定义我的
CMakeLists.txt
文件如下:
cmake_minimum_required(VERSION 3.0)
find_package(MPI REQUIRED)
add_executable(my_program my_program.cpp)
set(PETSC_DIR "/usr/local/petsc")
target_include_directories(my_program PUBLIC
${MPI_INCLUDE_PATH}
${PETSC_DIR}/include)
target_link_libraries(my_program PUBLIC
${MPI_LIBRARIES}
${PETSC_DIR}/lib)
在
my_program
中,我简单地调用fftw_mpi_init()
:
#include <mpi.h>
#include <fftw3-mpi.h>
int main(){
MPI_Init(NULL, NULL);
fftw_mpi_init();
}
但是,此设置返回错误消息
undefined reference to `fftw_mpi_init'
我意识到
fftw_mpi_init
没有在我的 /usr/local/petsc
目录中的任何地方定义:
这是否与我的 C++ 程序无法找到 fftw 函数有关?如果我想使用与 petsc 一起下载的 fftw 安装,我需要采取哪些步骤?
编辑:我也尝试添加行
find_package(PkgConfig REQUIRED)
pkg_search_module(FFTW REQUIRED fftw3 IMPORTED_TARGET)
include_directories(PkgConfig::FFTW)
link_libraries (PkgConfig::FFTW)
按照
here的建议添加到我的
CMakeLists.txt
文件,但我仍然遇到相同的错误undefined reference to fftw_mpi_init'
.