繁体   English   中英

CMake 项目中对 function 的未定义引用

[英]Undefined reference to function in CMake Project

我真的坚持使用 CMake 将编译的二进制文件包含到 C/C++ MinGW 项目中。 我使用 CLion 是因为它是我最喜欢的 IDE 但它的项目是基于 CMake 的。

通常我有.dll 文件和.h 文件(.dll.a 是可选的),我尝试了很多变体与“target_link_library”、“find_package”等,但项目的编译返回“未定义的对 %function_name% 的引用或“返回 0x0135”,表示未找到库。

CMake 的示例如下所示:

 cmake_minimum_required(VERSION 3.22) project(untitled) set(CMAKE_CXX_STANDARD 23) include_directories("SDL2/include") add_subdirectory(SDL2) add_executable(untitled main.cpp) target_link_libraries(untitled SDL2)

结果:

 C:\Program Files\JetBrains\CLion 2021.3.3\bin\mingw\bin/ld.exe: CMakeFiles/untitled.dir/main.cpp.obj: in function `SDL_main': F:/SoftwareProjects/untitled/main.cpp:16: undefined reference to `SDL_CreateWindow' C:\Program Files\JetBrains\CLion 2021.3.3\bin\mingw\bin/ld.exe: F:/SoftwareProjects/untitled/main.cpp:24: undefined reference to `SDL_GetWindowSurface' C:\Program Files\JetBrains\CLion 2021.3.3\bin\mingw\bin/ld.exe: F:/SoftwareProjects/untitled/main.cpp:26: undefined reference to `SDL_MapRGB' C:\Program Files\JetBrains\CLion 2021.3.3\bin\mingw\bin/ld.exe: F:/SoftwareProjects/untitled/main.cpp:26: undefined reference to `SDL_FillRect' C:\Program Files\JetBrains\CLion 2021.3.3\bin\mingw\bin/ld.exe: F:/SoftwareProjects/untitled/main.cpp:28: undefined reference to `SDL_UpdateWindowSurface' C:\Program Files\JetBrains\CLion 2021.3.3\bin\mingw\bin/ld.exe: F:/SoftwareProjects/untitled/main.cpp:30: undefined reference to `SDL_Delay' C:\Program Files\JetBrains\CLion 2021.3.3\bin\mingw\bin/ld.exe: F:/SoftwareProjects/untitled/main.cpp:32: undefined reference to `SDL_DestroyWindow' C:\Program Files\JetBrains\CLion 2021.3.3\bin\mingw\bin/ld.exe: F:/SoftwareProjects/untitled/main.cpp:34: undefined reference to `SDL_Quit'

header 文件一切正常。 链接.dll(和.dll.a)正确投影的问题。 这不是关于一个图书馆。 我的问题:我不明白如何以正确的方式链接它。 请帮帮我

更新:伙计们,为您的建议提供了很多帮助,但问题不仅仅存在于 SDL2 库中。 我期待一些一般的东西。 我还有另一个例子:我发现了一个名为 SIGIL 的不错的库( http://www.libsigil.com/ )。 我自己编译了所有内容并将其放入 CMakeLists.txt:

 set(SIGIL_INCLUDE_DIR libs/include) set(SIGIL_LIB_DIR libs/) include_directories(${SIGIL_INCLUDE_DIR}) link_directories(${SIGIL_LIB_DIR}) add_executable(MyApplication main.cpp) target_link_libraries(MyApplication sigil)

仍然获得对 sigil 函数的未定义引用,或进程返回 0x0135(未找到库)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM