You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SDL3作为Git子模块链接时遇未定义引用及编译错误求助

问题解决指南

未定义引用错误的根源

你一开始用target_link_directories链接SDL3::SDL3是错误用法——这个指令是用来指定库文件路径的,而SDL3::SDL3是CMake生成的导入目标,正确操作是用target_link_libraries直接链接它,这也是你后来尝试的操作,但由此触发了宏冲突问题。

towupper宏冲突错误的解决

这个错误是Cygwin环境特性导致的:系统头文件(比如wctype.h)已经定义了towupper宏,而SDL3的SDL_hidapi_windows.h里又重复定义了该宏,直接引发语法冲突。按以下步骤修复:

1. 修改CMakeLists.txt添加预定义宏

在引入SDL3子模块前,添加禁止SDL重定义towupper的宏:

cmake_minimum_required(VERSION 3.5.0)

project(project VERSION 0.1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)

# 预定义宏,避免towupper宏冲突
add_definitions(-DSDL_NO_TOWUPPER_REDIRECT)

add_subdirectory(extern/sdl)
include_directories(Inc)

add_executable(project Src/main.cpp)

target_include_directories(project PUBLIC extern/sdl/include)
# 正确链接SDL3目标
target_link_libraries(project PRIVATE SDL3::SDL3)

2. 调整代码头文件包含顺序

如果代码里先包含了系统头文件再包含SDL头文件,也会触发冲突。可以在包含SDL头文件前手动定义宏:

#define SDL_NO_TOWUPPER_REDIRECT
#include <SDL3/SDL.h>

3. 检查Cygwin依赖

确保Cygwin已经安装libhidapi-devel这类SDL3依赖库,避免后续出现其他编译问题。

内容的提问来源于stack exchange,提问作者Karol Borecki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:27:37