使用cmake编译时出错:找不到-ldwmapi

使用cmake编译时出错:找不到-ldwmapi,c,cmake,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 execu

编辑:在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
。下面是解决此问题的解决方法。我不确定这能解决你的问题。请注意,这是自我责任

  • C:\msys64\mingw64\lib\pkgconfig
  • 在vim中打开这些文件,删除
    -ldwmapi
    :wq
  • 更新 让我们创建libdwmapi.a

  • 从下载def文件
  • dlltool-d dwmapi.def-l libdwmapi.a

  • 我不会发布答案,因为我已经多年没有使用windows了,但看起来dwmapi.dll是windows系统二进制文件。我的猜测是,您应该确保该文件位于构建路径中。使用
    pkg-config--libs-gtk+-3.0
    的输出是什么?C:\msys64\mingw64\bin>pkg-config.exe--libs-gtk+-3.0-LC:/msys64/mingw64/lib-lgtk-3-lgdk-3-lgdi32-limm32-lshell32-lole32-Wl,-luuid-lwinmm-ldwmapi-lsetupapi-lcfgmr32-lz-lpangowin32-1.0-lpangocao-1.0-lpango-1.0-latk-1.0-lcairo-gobject-lcairo-lgdk_pixbuf-2.0-lgio-2.0-lglib-2.0-lintldwmapi.dll位于windows 10中的C:/windows/system32中,它创建libdwmapi.a作为0字节文件C:\MinGW\bin>dltol-d dw.def-l-libdwmapi.adlltool:CreateProcessok,我创建了一个新的mingw目录,安装了我需要的所有软件包,它工作正常