使用CMake创建的VS Qt项目编译时出现LNK2019链接错误
解决QDomDocument相关LNK2019未解析外部符号错误
这个问题太常见了!你碰到的是Qt模块链接遗漏的典型问题——QDomDocument属于Qt的Xml模块,而CMake不会自动帮你链接所有Qt模块,所以只有用到Dom相关类时才会触发链接错误,其他常用Qt类(比如QString、QWidget)因为已经链接了Core/Widgets模块,所以能正常编译。
给你几个具体的解决步骤:
首先检查你的CMakeLists.txt,确保在
find_package时包含了Xml模块:# Qt5的写法 find_package(Qt5 REQUIRED COMPONENTS Core Widgets Xml) # 如果是Qt6,改成下面这样 find_package(Qt6 REQUIRED COMPONENTS Core Widgets Xml)然后把Xml模块添加到目标链接库中,假设你的项目名称是
Graph,就加上:# Qt5版本 target_link_libraries(Graph PRIVATE Qt5::Core Qt5::Widgets Qt5::Xml) # Qt6版本 target_link_libraries(Graph PRIVATE Qt6::Core Qt6::Widgets Qt6::Xml)最后,重新生成CMake缓存并编译项目——在VS里可以右键项目→CMake→Configure,然后再执行Build操作。
原理其实很直白:Qt的每个模块对应单独的动态库,Xml模块的函数实现都在Qt5Xml.dll(或Qt6Xml.dll)里,没链接这个库的话,链接器就找不到QDomNode这些类的构造/析构函数,自然就报LNK2019错误了。
内容的提问来源于stack exchange,提问作者rednefed
相关产品推荐
相关产品推荐

