You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在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.tbdlibz.tbdlibiconv.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,让它正确关联系统库:

  1. 先卸载现有版本:
    brew uninstall wxwidgets
    
  2. 从源码重新安装,指定用系统原生库:
    brew install wxwidgets --build-from-source --with-osx_cocoa --disable-shared
    
    从源码编译会让Homebrew根据你的系统环境生成正确的wx-config配置,后续再用原始编译命令就不会报错了。

验证成功

编译完成后,运行生成的程序:

./HelloWorld

如果弹出wxWidgets的"Hello, World!"窗口,就说明问题解决啦!

内容的提问来源于stack exchange,提问作者Vulpes-Vulpeos

火山引擎 最新活动