从MinGW+GCC迁移至MSVC 2022后静态库未归档目标文件导致未解析外部符号问题求助
从MinGW+GCC迁移至MSVC 2022后静态库未归档目标文件导致未解析外部符号问题求助
我最近正把自己的小型C++项目从MinGW+GCC迁移到搭配Ninja生成器的MSVC 2022环境,结果碰到了一个棘手的链接问题:在MinGW下所有代码都能正常链接运行,但MSVC始终抛出如下错误:
engine.lib(windows_window.cpp.obj) : error LNK2019: unresolved external symbol Honey::OpenGLContext::OpenGLContext(GLFWwindow*) referenced in Honey::WindowsWindow::init(...) fatal error LNK1120: 1 unresolved externals
背景细节:
engine是一个静态库,opengl_context.cpp已经被包含在它的源文件列表中- 我的应用程序链接配置尝试过多种方式:
add_executable(application src/application.cpp) # 最初的链接配置 target_link_libraries(application PRIVATE engine # 包含所有引擎cpp文件的静态库 glfw glm glad imgui # 外部依赖库 ) # 尝试让MSVC重新扫描库的第二次配置 target_link_libraries(application PUBLIC engine) # 还试过用链接选项替代上述第二次配置 target_link_options(application PRIVATE "/WHOLEARCHIVE:engine.lib") - 我已经尝试了“重复链接”技巧,也给
engine.lib加了/WHOLEARCHIVE选项,但问题依旧 - 用
lib.exe /LIST engine.lib | findstr opengl_context命令验证过,opengl_context.cpp.obj完全没有出现在engine.lib里——也就是说MSVC根本没把这个目标文件归档进静态库 - 执行清理重建后,
opengl_context.cpp编译过程没有任何错误,但对应的.obj文件还是没被加入静态库
核心疑问:
为什么MSVC会跳过将已编译的.obj文件归档到静态库中,而MinGW+GCC却能正常包含它?有没有我忽略的CMake/MSVC静态库相关的坑?我很乐意分享完整的CMakeLists文件或编译日志。
内容来源于stack exchange
相关产品推荐
相关产品推荐

