Windows 上的多线程 fftw 库

问题描述 投票:0回答:1

我已经从网站http://www.fftw.org/install/windows.html下载了预编译的Windows DLL。我还创建了 *.lib 文件。不过,它们不包含多线程相关的函数

fftw_init_threads
fftw_plan_with_nthreads
等等。

那么,如何在windows上使用多线程fftw呢?我需要自己编译代码吗?

编辑:我尝试使用 Visual Studio 2022 自己构建版本 3.3.10。我正在使用 cmakesettings.json 中设置的以下标志进行编译:

{
  "name": "x64-Release",
  "generator": "Ninja",
  "configurationType": "RelWithDebInfo",
  "buildRoot": "${projectDir}\\out\\build\\${name}",
  "installRoot": "${projectDir}\\out\\install\\${name}",
  "cmakeCommandArgs": "",
  "buildCommandArgs": "",
  "ctestCommandArgs": "",
  "inheritEnvironments": [ "msvc_x64_x64" ],
  "variables": [
    {
      "name": "ENABLE_SSE",
      "value": "False",
      "type": "BOOL"
    },
    {
      "name": "ENABLE_SSE2",
      "value": "True",
      "type": "BOOL"
    },
    {
      "name": "ENABLE_AVX2",
      "value": "True",
      "type": "BOOL"
    },
    {
      "name": "ENABLE_AVX",
      "value": "False",
      "type": "BOOL"
    },
    {
      "name": "ENABLE_FLOAT",
      "value": "True",
      "type": "BOOL"
    },
    {
      "name": "ENABLE_THREADS",
      "value": "True",
      "type": "BOOL"
    },
    {
      "name": "CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS",
      "value": "True",
      "type": "BOOL"
    }
  ]
}

使用此设置,我仍然收到以下链接器错误:

创建库 fftw3f_threads.lib 和对象 fftw3f_threads.exp
ftw-3.3.10\out uild\x64-发布 pi.c.obj :错误 LNK2001: 未解析的外部符号 fftwf_mksolver_ct_hook
ftw-3.3.10\out uild\x64-发布 pi.c.obj :错误 LNK2001: 未解析的外部符号 fftwf_mksolver_hc2hc_hook
ftw-3.3.10\out uild\x64-发布 ftw3f_threads.dll:致命错误 LNK1120:2 个未解决的外部问题

c++ fftw
1个回答
0
投票

好吧,我想我已经明白了,差不多了。至少,我可以看到事情出轨的地方。

根据注释,FFTW 宏化了它的所有函数名称(和全局变量)。在

CONVENTION
中,我们读到:

NAME MANGLING:使用

X(foo)
作为外部名称,而不是
fftw_foo
X(foo)
扩展为
fftwf_foo
fftw_foo
,具体取决于 精度。

所以现在我们知道

fftwf_mksolver_ct_hook
的另一个自我实际上是
X(mksolver_ct_hook)

快速搜索

mksolver_ct_hook
显示它是在
ct.c
中定义的(它是全局的),因此该文件显然没有包含在构建中。

同样,

mksolver_hc2hc_hook
hc2hc.c
中定义。

交给你了。可能还有几英里路要走,但你现在应该没问题了。

© www.soinside.com 2019 - 2024. All rights reserved.