所以我(不假思索地)将我的操作系统更新到MacOS High Sierra之后安装了Root 6.12.04。我克隆了git存储库并按照"快速启动"中的所有步骤进行操作。构建根页面。但是我的构建出了问题,这是我尝试启动root的新实例并运行Detector test时出现的错误:
dyld:懒符号绑定失败:未找到符号:__ ZN5TROOT14RegisterModuleEPKcPS1_S2_S1_S1_PFvERKNSt3__16vectorINS5_4pairINS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEiEENSB_ISE_EEEES2_ 参考自:/Users/MM/repos/nsd-rootscripts/compile/NSDRootScriptsLib.so 预计在:/Users/MM/cern/root-build/lib/libCore.so
dyld:未找到符号:__ ZN5TROOT14RegisterModuleEPKcPS1_S2_S1_S1_PFvvERKNSt3__16vectorINS5_4pairINS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEiEENSB_ISE_EEEES2_ 参考自:/Users/MM/repos/nsd-rootscripts/compile/NSDRootScriptsLib.so 预计在:/Users/MM/cern/root-build/lib/libCore.so
有谁知道构建出错的地方?
答案 0 :(得分:1)
这意味着ROOT的字典界面已更改,但您的字典源(此处:NSDRootScriptsLib.so中的字典源)未更新。请重新生成词典。
答案 1 :(得分:0)
这不是解决方案,但可能会让您走上正轨。
如果您对使用c++filt
发布的符号名称进行了解码,则会得到
TROOT::RegisterModule(
char const*,
char const**,
char const**,
char const*,
char const*,
void (*)(),
std::__1::vector<
std::__1::pair<
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >,
int
>,
std::__1::allocator<
std::__1::pair<
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >,
int
>
>
> const&,
char const**
)
所以,问题是你的链接器找不到这个TROOT::RegisterModule()
函数的定义。
你说问题出在libCore.so
。用
libCore.so
objdump -x libCore.so | grep RegisterModule | c++filt
我可以看到我定义了一个相同的符号。如果此命令没有为您打印任何内容,那么您的编译一定出错并且没有将此函数编译到库中。
不幸的是,这是我能得到你的。