Xerces 3.2.0 XCode项目仍依赖libicuuc/libcurl,如何彻底移除?
解决Xerces-C 3.2.0在MacOS上构建时残留libicu、libcurl依赖的问题
你遇到的核心问题是混淆了Autotools(configure)和CMake两套独立的构建系统——先通过configure设置的参数并不会被后续的CMake流程读取,所以那些禁用依赖的配置根本没生效,导致生成的库依然带着不必要的链接。下面是针对性的解决方案:
1. 彻底清理旧构建缓存
首先删掉之前生成的XCode项目目录,避免旧的配置残留干扰:
rm -rf /Users/rbartels/dev/external/xerces-c/3.2.0/proj/MacOS/XCode3/
2. 直接用CMake参数指定所有禁用选项
跳过configure,直接在CMake命令中传递架构、禁用依赖的参数。Xerces-C的CMake构建系统支持以下关键参数来控制依赖:
- 指定架构:
-DCMAKE_OSX_ARCHITECTURES=x86_64 - 禁用ICU转码器,改用系统iconv:
-Dtranscoder=iconv - 完全禁用网络模块:
-Dnetwork=disabled - 禁用curl网络访问器:
-Dnetaccessor=disabled - 明确关闭curl依赖:
-Dwith-curl=OFF
完整的CMake命令应该是:
cmake -B"/Users/rbartels/dev/external/xerces-c/3.2.0/proj/MacOS/XCode3/" \ -H"/Users/rbartels/dev/external/xerces-c/3.2.0" \ -G XCode \ -DCMAKE_OSX_ARCHITECTURES=x86_64 \ -Dtranscoder=iconv \ -Dnetwork=disabled \ -Dnetaccessor=disabled \ -Dwith-curl=OFF
3. 验证构建结果
构建完成后,用otool检查生成的动态库依赖,确认不再包含libicu或libcurl:
otool -L /Users/rbartels/dev/external/xerces-c/3.2.0/proj/MacOS/XCode3/lib/libxerces-c-3.2.dylib
输出里应该只有系统自带的库(比如libiconv.2.dylib、libc++.1.dylib等),没有icu或curl相关的条目。
关键原理说明
Xerces-C同时提供了Autotools和CMake两种构建方式,但这两套系统是完全独立的——configure生成的Makefile或配置文件不会被CMake读取。你之前的操作相当于先给一套构建系统做了配置,却用另一套完全无关的系统去编译,自然不会生效。直接用CMake参数指定所有需要的选项,才是正确的做法。
内容的提问来源于stack exchange,提问作者Rudi Bartels
相关产品推荐
相关产品推荐

