c++ - 如何在 Windows 上静态链接 FFTW?
问题描述
在我的项目设置过程中 - 当我对 cmake 的了解甚至比现在还少时 - 我正在尽最大努力链接 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 文件是“存根”。它们包含足够的代码来加载 DLL 并从中调用函数。它们不包含实际的 FFTW 代码。您不能与这些预构建的 FFTW LIB 进行静态链接。
您需要先自己将 FFTW 编译成静态库。它带有一个CMake构建文件,您可以在其中关闭BUILD_SHARED_LIBS
.
编辑:审查时,您的问题与此问题几乎相同,答案相同。
推荐阅读
- javascript - 如何正确使用带有 Next.js 路由的 Locomotive Scroll?
- c# - 所以我试图将几个不同项目的列表排序到一个允许堆叠的库存槽列表中,并且每个槽只有 1 个带有计数的项目精灵
- amazon-web-services - AWS API Gateway - 如果 json 有效负载的字段包含“ ” ,则禁止
- python - Python Elasticsearch 客户端 - 更新每个请求的标头
- javascript - 如何从html中的另一个页面更改xml文件
- javascript - Angular:错误 NG8001:“组件”不是已知元素
- image-segmentation - 如何在 ITK-snap 中测量分段 ROI 的最大值?
- angular - 带有 mat-icon 的 mat-select-trigger 未在 div 元素中显示
- amazon-web-services - Firebase 云消息传递是否需要 AWS SNS?
- javascript - 具有标准数组的 js 上的 Javascript 动态过滤器