gpt4 book ai didi

c++ - 如何在 Windows 上静态链接 FFTW?

转载 作者:行者123 更新时间:2023-12-02 10:00:19 32 4
gpt4 key购买 nike

在我的项目设置期间 - 当我对 cmake 的了解比现在更少时 - 我是 trying my hardest链接 FFTW 库。

C:\\path\\to\\fftw-3.3.5-dll64 包含.h 文件,.lib 文件(从 .def 文件生成)和 .dll 文件。

我最后做的是将这些链接添加到我的 CMakeLists.txt:

add_executable(${TargetName} PRIVATE main.cpp)
target_include_directories(${TargetName} PRIVATE "C:\\path\\to\\fftw-3.3.5-dll64")
target_link_directories(${TargetName} PRIVATE "C:\\path\\to\\fftw-3.3.5-dll64")
target_link_libraries(${TargetName} PRIVATE libfftwf3-3)

构建此应用程序后,该应用程序仍然无法运行。最终,我发现在打开可执行文件时,Windows 正在寻找 libfftw3-3 dll 文件。当时我只是想让它工作,所以我复制了库中包含的 .dll 文件 - 尽管这是共享/动态链接,而不是静态链接。


我现在正在尝试正确地静态链接库;我从我的构建文件夹中删除了 dll,并将我的 CMakeLists.txt 文件过滤为:

add_executable(${TargetName} PRIVATE main.cpp)
target_include_directories(${TargetName} PRIVATE "C:\\path\\to\\fftw-3.3.5-dll64")
target_link_libraries(${TargetName} PRIVATE libfftwf3-3)

正如我所期望的那样,这构建了。然而,即使在我的 CMakeLists.txt 文件中,我已经采取了静态链接库的步骤,我仍然需要复制 dll 才能运行可执行文件(它的动态链接仍然)。


(成功)详细构建输出:https://pastebin.com/bbrZdd7r

最佳答案

您从 DEF 文件生成的 LIB 文件是“ stub ”。它们只包含足够的代码来加载 DLL 并从中调用函数。它们不包含实际的 FFTW 代码。您不能静态链接这些预构建的 FFTW LIB。

您需要先将FFTW 编译成静态库。它带有 CMake构建文件,您可以在其中关闭 BUILD_SHARED_LIBS

编辑:经过审查,您的问题几乎与 this one 相同, 答案相同。

关于c++ - 如何在 Windows 上静态链接 FFTW?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62906520/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com