c - 使用cmake编译时出错: cannot find -ldwmapi

标签 c cmake

编辑:我在 Windows 上使用 MinGW-x86_64

当我尝试使用 cmake 编译 gtk+ 3 c 项目时,日志中出现以下错误消息:

"C:\Program Files\JetBrains\CLion 2017.1.3\bin\cmake\bin\cmake.exe" --build C:\Users\Jonas\ClionProjects\tutorial\cmake-build-debug --target tutorial -- -j 4
[ 50%] Linking C executable tutorial.exe
c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -ldwmapi
collect2.exe: error: ld returned 1 exit status
CMakeFiles\tutorial.dir\build.make:96: recipe for target 'tutorial.exe' failed
mingw32-make.exe[3]: *** [tutorial.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/tutorial.dir/all] Error 2
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/tutorial.dir/all' failed
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/tutorial.dir/rule' failed
mingw32-make.exe[1]: *** [CMakeFiles/tutorial.dir/rule] Error 2
mingw32-make.exe: *** [tutorial] Error 2
Makefile:117: recipe for target 'tutorial' failed

这是我的CMakeLists.txt,我在其中添加了gtk3及其库,但是当我尝试编译时,它出现了前面提到的错误。

cmake_minimum_required(VERSION 3.7)
project(tutorial)

set(CMAKE_C_STANDARD 99)

set(SOURCE_FILES main.c)

set(PKG_CONFIG_EXECUTABLE "C:/msys64/mingw64/bin/pkg-config.exe")

FIND_PACKAGE(PkgConfig REQUIRED)
PKG_CHECK_MODULES(GTK3 REQUIRED gtk+-3.0)

INCLUDE_DIRECTORIES(${GTK3_INCLUDE_DIRS})
LINK_DIRECTORIES(${GTK3_LIBRARY_DIRS})

add_executable(tutorial ${SOURCE_FILES})

ADD_DEFINITIONS(${GTK3_CFLAGS_OTHER})

TARGET_LINK_LIBRARIES(tutorial ${GTK3_LIBRARIES})

最佳答案

dwmapi.dll 仅适用于 Vista。所以我猜测这是gtk+-3.0包的一个bug。您的操作系统不需要 -ldwmapi。以下是解决此问题的解决方法。我不确定这会解决您的问题。请注意,这是 self 责任。

  1. C:\msys64\mingw64\lib\pkgconfig 中备份 gdk-3.0.pc、gdk-broadway-3.0.pc、gdk-win32-3.0.pc
  2. >
  3. 在 vim 中打开这些文件,删除 -ldwmapi:wq

更新

让我们创建 libdwmapi.a

  1. here 下载 def 文件
  2. dlltool -d dwmapi.def -l libdwmapi.a

关于c - 使用cmake编译时出错: cannot find -ldwmapi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44911016/

相关文章:

c - libc 创建/访问哪些匿名区域?

c - 了解 pthread_detach

c - 使用外部控制格式字符串的漏洞

c - OpenCL 中带有偏移量的固定内存

c - 局部变量前的 GOTO

c++ - PietCreator C++ 无法编译

linux - 使用 CMake 创建二进制文件会删除运行时路径

c++ - GLFW undefined reference 很多东西

CMake 找不到库

visual-studio-2010 - Visual Studio要编译目录