如何使用自定义版本第三方库编译CMake项目中的wxWidgets
问题原因
你遇到的找不到pcre2_auto_possess.c、xmlparse.c等源文件的报错,本质是当前使用的wxWidgets源码缺失内置依赖的源代码:要么是你拉取git仓库时没有同步子模块,要么是下载的精简发行包未携带3rdparty、src/xxx下的第三方依赖源码,所以将依赖设为builtin时无法找到编译所需的源文件。
解决方案
你可以选择以下任意一种方式解决问题:
方案1:补全源码后使用内置依赖
如果希望将regex、expat、libtiff等剩余依赖设为builtin,需要先补全wxWidgets的依赖子模块:
在wxWidgets源码根目录执行命令:
git submodule update --init 3rdparty/pcre 3rdparty/expat src/tiff
子模块拉取完成后,保留原有wxUSE_REGEX=builtin、wxUSE_EXPAT=builtin、wxUSE_LIBTIFF=builtin配置即可正常编译,不会再报找不到源文件的错误。
方案2:将剩余依赖也改为使用自定义编译版本
和你处理zlib、libjpeg、libpng的逻辑一致,给剩余依赖也配置sys模式,传入你自己编译的库路径即可:
- 处理正则依赖:添加参数
-DwxUSE_REGEX=sys,同时传入-DPCRE2_LIBRARY=${你编译的pcre2库路径}、-DPCRE2_INCLUDE_DIR=${pcre2头文件路径} - 处理XML解析依赖:添加参数
-DwxUSE_EXPAT=sys,同时传入-DEXPAT_LIBRARY=${你编译的expat库路径}、-DEXPAT_INCLUDE_DIR=${expat头文件路径} - 处理libtiff依赖:等你将libtiff加入外部项目后,将原有
-DwxUSE_LIBTIFF=builtin改为-DwxUSE_LIBTIFF=sys,再传入-DTIFF_LIBRARY=${你编译的libtiff库路径}、-DTIFF_INCLUDE_DIR=${libtiff头文件路径}即可
额外注意事项
- 你当前配置中指定了
CMAKE_BUILD_TYPE=Release但构建的是Debug版本,请注意各依赖库的编译类型要和wxWidgets的编译类型匹配,否则会出现链接错误。 - 你配置中写的
MONOLITHIC=1未生效,wxWidgets的CMake单库编译参数为wxBUILD_MONOLITHIC,修改为-DwxBUILD_MONOLITHIC=1即可生成合并的单库文件。
内容的提问来源于stack exchange,提问作者rbaleksandar
相关产品推荐
相关产品推荐

