如何在失败的编译中find缺失的依赖项?

有时编译错误时会输出缺less的头文件的名称,并且可以使用Linux软件包pipe理器来追踪它来自的包。

但是如何在下面的错误types中find缺less的依赖关系,在哪里它不会给你缺less头文件的名字?

make[2]: *** [examples/undocumented/libshogun/base_map_parameters] Error 1 CMakeFiles/Makefile2:916: recipe for target 'examples/undocumented/libshogun/CMakeFiles/base_map_parameters.dir/all' failed make[1]: *** [examples/undocumented/libshogun/CMakeFiles/base_map_parameters.dir/all] Error 2 ../../../src/shogun/libshogun.so.17.1: undefined reference to `SZ_BufftoBuffDecompress' ../../../src/shogun/libshogun.so.17.1: undefined reference to `SZ_encoder_enabled' ../../../src/shogun/libshogun.so.17.1: undefined reference to `SZ_BufftoBuffCompress' collect2: error: ld returned 1 exit status examples/undocumented/libshogun/CMakeFiles/base_migration_dropping_and_new.dir/build.make:129: recipe for target 'examples/undocumented/libshogun/base_migration_dropping_and_new' failed 

您提供的头文件示例是一个编译时错误。 编译器知道这些文件,可以告诉你什么是缺少的。 您在上面显示的错误是链接时间错误。

你提出的是一个常见的,而且是一个符号没有定义。 通常发生这种情况是因为链接器行中排除了一个库。 此错误的另一个常见原因是您链接到的库比程序的预期更旧。

通常情况下,我发现自己在Google这样的文章中出现这样的错误, 在对文件或库进行计费时,打包管理器不会跟踪功能级别的详细信息。 我一直认为用nm命令来检查库是一个很好的改进,并把这个元数据放到打包系统中。

(这不是一个通用的答案,但是)在这种情况下, 使用SZ_BufftoBuffDecompress进行搜索 ,除其他外,链接到https://github.com/PacificBiosciences/blasr/issues/4 ,在那里建议

看来,hdf5库没有正确安装。 您使用的hdf5库需要szip库。 所以你可能需要首先安装szip lib,然后重新制作你的hdf5包(用szip lib,-lsz链接它)。

所以似乎缺少的依赖是szip

至于一般搜索 ,@Thomas Padron-McCarthy的评论明智地建议

也许添加程序名称

在Ubuntu上,我也可以添加apt-getinstall ,直接找到如何安装缺少的部分的说明!

如果你只需要这个软件 ,并且不需要自己编译,那么看看github的帖子。 另一张海报

建议使用Homebrew和Linuxbrew在Mac和Linux上安装科学软件,反复[原文如此]。