CMake 找不到库

标签 c gcc cmake mingw clion

我在 CLion 中有一个使用 CMake 的项目。我使用 include_directories 添加了目录列表命令,尽管 IDE 正确找到它们并提供自动完成功能,并且包含似乎正确链接,但当我尝试运行该程序时,我收到了对所有函数的 undefined reference 的错误。

更新的 CMake 文件:

cmake_minimum_required(VERSION 3.9)
project(Test C)

set(CMAKE_C_STANDARD 11)
set(C_LIBRARIES_DIR E:/Work\ Related\ General/C\ Projects/Libraries)

# set paths (only needed on windows)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  # where is the SDL2 development package copied to?
  set(SDL2_PATH "${C_LIBRARIES_DIR}/SDL2-2.0.8/i686-w64-mingw32")

  # add path do search path (windows requires ";" instead of ":" )
  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${C_LIBRARIES_DIR}/SDL2")
endif()

find_package(SDL2 REQUIRED)

include_directories(${SDL2_INCLUDE_DIR})

add_executable(Test src/main.c)

target_link_libraries(Test ${SDL2_LIBRARY})

我收到的错误如下:

"C:\Program Files\JetBrains\CLion 2017.3\bin\cmake\bin\cmake.exe" --build "E:\Work Related General\C Projects\Test\cmake-build-debug" --target Test -- -j 2
[ 25%] Linking C executable Test.exe
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [Test.exe] Error 1
CMakeFiles\Test.dir\build.make:152: recipe for target 'Test.exe' failed
mingw32-make.exe[2]: *** [CMakeFiles/Test.dir/all] Error 2
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/Test.dir/all' failed
mingw32-make.exe[1]: *** [CMakeFiles/Test.dir/rule] Error 2
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/Test.dir/rule' failed
mingw32-make.exe: *** [Test] Error 2
Makefile:117: recipe for target 'Test' failed

我永远无法在线找到有关 CMake 的良好帮助,事实上 IDE 可以正确识别库但无法链接,这让我感到困惑,因为 CLion 和 CMake 应该处理这个问题......我错过了什么?

更新 在 SDL include 之前添加以下指令允许 gcc 正确链接:#define SDL_MAIN_HANDLED

据我所知,SDL.h 本身重新定义了 main函数为 SDL_main在其头文件中。添加此指令会取消它的定义(某种程度上)。然而,目标是使程序在没有此指令的情况下运行(因为此指令适用于命令行程序)。仍然没有任何线索...

最佳答案

据我所知,当您想要使用 SDL2 时,您需要链接下一个包含 WinMain 函数 -lSDL2 的库 -lmingw32 -lSDL2main(libSDL2main) >(libSDL2.dll.a) 并应用标志 -mwindows。首先,我建议您亲自链接此库和标志以及库的完整路径。另外,如果您想知道变量存储的内容,您可以编写message。您的问题是它完全链接。

关于CMake 找不到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49619464/

相关文章:

c++ - gcc 看不到 SDL

c - 自动生成自定义C库的头文件

cmake - cmake中组件和 namespace 的命名约定

cmake - fbtorch : cmake can not find torch directories

c++ - 如何实现一个可以被换行分割的流

c - strtol、strtod 不安全吗?

c - C中回车键检测

c - malloc 存储它的元数据

gcc - 使用 flto 的要求

gcc - AT90USB162 (Minimus AVR) 上的 CDC 演示 COM 端口代码