【发布时间】:2020-07-15 02:03:33
【问题描述】:
在我的项目设置期间 - 当我对 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
【问题讨论】:
-
你能显示详细链接命令的输出吗?
-
@squareskittles 我不明白你的意思
-
编译可执行文件时,通常会打印一些日志。将这些包含在您的问题帖子中会很有帮助。你的编译器是什么?应该有一种方法可以显示更详细的编译/链接输出,以便此日志打印有助于解决问题的其他信息。
-
@squareskittles MSVC 1926(使用忍者)。我将添加构建输出(它通过了)
-
要获得详细的链接器输出,您可以尝试运行
ninja -v以提供额外的详细信息。这将显示 哪个 库实际上正在被链接。
标签: c++ windows cmake linker static-linking