[英]How do I statically link FFTW on windows?
在我的項目設置期間 - 當我對 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
文件——即使這是共享/動態鏈接,而不是 static 鏈接。
我現在正在嘗試正確靜態鏈接庫; 我從我的構建文件夾中刪除了 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 以使可執行文件運行(它仍然是動態鏈接)。
(成功)詳細構建 output: https://pastebin.com/bbrZdd7r
libs
可以是 static 或動態庫。 生成的(按照README-WINDOWS
文件中的說明)是共享的(它們鏈接到同一文件夾內的.dll
文件。
使用 FFTW 提供的 windows 二進制文件,您無法靜態鏈接(因為它們提供的只是動態庫( .dll
s)。如果您查看.lib
文件的文件大小,它非常小,因為它只是對.dll
s。
按照 FFTW 的 windows 頁面上的說明從源代碼構建庫。 因為您現在正在自己構建庫,所以您可以選擇打開“共享庫”並創建一個“靜態”庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.