GLFW链接报错unresolved external symbol __imp_strncpy问题求助
问题根源
这些带__imp_前缀的未解析外部符号报错,核心原因是项目之间的C运行时库(CRT)链接方式不匹配:
你的引擎和沙箱项目都在Windows配置下开启了staticruntime "On",也就是静态链接CRT,但GLFW的Premake脚本没有指定静态运行时,默认使用动态CRT编译,两者符号规则不匹配导致链接失败。
修复步骤
- 修改GLFW的Premake脚本,添加静态运行时声明,和主项目配置对齐:
project "GLFW" kind "StaticLib" language "C" -- 新增:和主项目匹配,开启静态运行时 staticruntime "On" -- 以下原有内容保持不变 targetdir ("bin/" .. outputdir .. "/%{prj.name}") objdir ("bin-int/" .. outputdir .. "/%{prj.name}") files { "include/GLFW/glfw3.h", "include/GLFW/glfw3native.h", "src/glfw_config.h", "src/context.c", "src/init.c", "src/input.c", "src/monitor.c", "src/vulkan.c", "src/window.c" } -- 剩余原有配置全部保留即可
- 清理之前生成的编译缓存(删除bin、bin-int文件夹下的所有内容),重新生成项目文件并全量编译即可。
可选验证项
如果修改后仍有报错,可以确认以下配置是否正常:
- 所有项目的Debug/Release配置对应正确,Debug模式使用Debug版本静态CRT,Release模式使用Release版本静态CRT,你现有GLFW配置中的
runtime "Debug"/runtime "Release"声明已经满足要求,无需额外修改 - 没有混合x86和x64的编译输出,你工作区已经指定
architecture "x64",这部分配置无问题 - GLFW源码完整,你现有配置中已经包含了Windows平台需要的全部源文件,没有遗漏
内容的提问来源于stack exchange,提问作者DevStuffz
相关产品推荐
相关产品推荐

