在macOS系统编译wx-widgets版"Hello, World!"程序时遭遇文件不存在错误
解决macOS Big Sur下wxWidgets编译找不到libexpat.tbd等文件的问题
嘿,我来帮你搞定这个编译报错的问题!你遇到的clang: error: no such file or directory: 'libexpat.tbd'这类错误,根源是Homebrew安装的wxWidgets生成的wx-config输出里,直接引用了.tbd文件名,但clang没办法在默认路径里找到这些文件——这些.tbd是Xcode SDK里的库描述文件,wx-config没正确处理它们的引用方式。
问题原因分析
看你贴的wx-config --libs输出,末尾直接列出了libexpat.tbd、libz.tbd、libiconv.tbd,但正常情况下,clang链接系统库应该用-l前缀(比如-lexpat),而不是直接写文件名,wxWidgets的配置在这里出了问题。
快速临时解决方法
你可以直接修改编译命令,把wx-config输出里的.tbd文件名替换成正确的链接参数,用sed命令就能一键搞定:
g++ `wx-config --cxxflags` -o HelloWorld HelloWorld.cpp `wx-config --libs | sed -e 's/libexpat.tbd/-lexpat/' -e 's/libz.tbd/-lz/' -e 's/libiconv.tbd/-liconv/'`
这个命令会自动把三个错误的库引用替换成clang能识别的格式,直接就能编译通过。
彻底修复方案(重新编译wxWidgets)
如果不想每次编译都加sed命令,你可以重新安装wxWidgets,让它正确关联系统库:
- 先卸载现有版本:
brew uninstall wxwidgets - 从源码重新安装,指定用系统原生库:
从源码编译会让Homebrew根据你的系统环境生成正确的wx-config配置,后续再用原始编译命令就不会报错了。brew install wxwidgets --build-from-source --with-osx_cocoa --disable-shared
验证成功
编译完成后,运行生成的程序:
./HelloWorld
如果弹出wxWidgets的"Hello, World!"窗口,就说明问题解决啦!
内容的提问来源于stack exchange,提问作者Vulpes-Vulpeos




