在macOS High Sierra编译MeshLab full失败,遇undeclared identifier报错
我来帮你梳理下排查和解决这个问题的步骤,针对你在Mac High Sierra上编译MeshLab遇到的报错,结合你怀疑Qt组件缺失的思路:
先检查Qt的script和xmlpatterns组件是否安装
因为你是用Homebrew装的Qt 5.10.1,用这两种方法就能快速确认组件状态:
用Homebrew直接查询:
在终端运行这条命令,过滤出和目标组件相关的内容:brew list qt | grep -E "(script|xmlpatterns)"如果能看到
QtScript.framework、QtXmlPatterns.framework这类条目,说明组件已经装了;要是没任何输出,那确实是缺失了。检查Qt库目录:
先找到Qt的安装库路径:qmake -query QT_INSTALL_LIBS进入输出的目录,看看有没有
libQt5Script.dylib和libQt5XmlPatterns.dylib,或者对应的.framework文件夹,没有的话就是组件没装。
解决报错的具体步骤
这个报错大概率是Qt XmlPatterns模块没被正确链接,导致代码里的opt对象无法被识别,按下面的步骤来修复:
补装缺失的Qt组件
如果确认组件缺失,重新安装Qt并指定启用这两个组件:brew reinstall qt --with-qtscript --with-qtxmlpatterns要是上面的参数不生效(Homebrew的配方可能随版本调整),可以先查看Qt的brew配方说明:
brew info qt看看有没有对应的编译选项来开启script和xmlpatterns组件。
重新配置MeshLab编译环境
之前的CMake缓存可能已经记录了错误的Qt依赖信息,先清理缓存:cd 你的MeshLab编译目录 rm -rf CMakeCache.txt CMakeFiles然后重新运行CMake,明确指定Qt的安装路径(brew装的Qt一般在
/usr/local/opt/qt,不确定的话用brew --prefix qt查准确路径):cmake -DCMAKE_PREFIX_PATH=$(brew --prefix qt) ..验证代码的头文件引用
打开报错的meshlabdocumentxml.cpp,找到第115行附近,确认有没有包含XmlPatterns的头文件:#include <QtXmlPatterns/QXmlQuery> #include <QtXmlPatterns/QXmlResultItems>如果没加,补上之后再重新编译试试。
内容的提问来源于stack exchange,提问作者cheese

