Mac下cmake构建ROOT类RooUnfold报-lgcov找不到链接错误
错误原因
ld: library not found for -lgcov报错的核心原因是:macOS自带的Apple Clang编译器不提供GCC专属的gcov代码覆盖率库,RooUnfold默认的CMake构建脚本未做编译器适配,会给测试程序强制添加-lgcov链接参数,最终导致链接失败。
从构建日志可以确认,核心功能库libRooUnfold.dylib实际已经编译完成,失败的全部是test目录下的测试可执行文件,不影响核心库本身的功能。
解决方法
根据自身需求二选一即可:
方案1:跳过测试构建(推荐,普通用户直接用这个)
如果不需要运行RooUnfold自带的测试用例,仅使用核心库功能,直接在cmake阶段关闭测试构建开关,清理旧构建目录后重新执行编译流程:
cd RooUnfold-master rm -rf build mkdir build cd build cmake .. -DBUILD_TEST=OFF make -j4 cd .. source build/setup.sh
执行完即可顺利完成全部构建,核心功能无任何缺失。
方案2:需要编译测试用例的修复方式
如果必须编译测试程序,修改源码根目录下的CMakeLists.txt:
- 找到所有和gcov、代码覆盖率相关的配置段,添加编译器判断逻辑:仅当使用GCC编译器时,才添加
-lgcov、--coverage相关的编译、链接参数,Apple Clang环境下自动跳过这类参数 - 简单处理的话,直接把文件中所有包含
-lgcov、gcov的行全部注释掉,再重新执行cmake、make流程即可
编译过程中输出的
override标记缺失、格式类型不匹配类警告均为代码规范类提示,不影响程序功能,可以直接忽略。
构建验证
构建完成后启动ROOT,执行以下命令验证库是否正常加载:
gSystem->Load("libRooUnfold"); RooUnfoldBayes::Class();
无报错即代表构建成功,可以正常使用RooUnfold相关功能。
内容的提问来源于stack exchange,提问作者pra
相关产品推荐
相关产品推荐

