编译FSL: '致命错误:的libxml ++ / ++的libxml H:没有这样的文件或目录'

问题描述 投票:1回答:1

据我所知,这已经涨了不少,但我已经通过所有其他的答案看了看,他们都不是与我有关。

我试图从源代码编译影像学软件FSL(我必须这样做,它不支持我的Linux发行版)。我已经照着所有的说明listed here,它的80%左右编译。有迹象表明,都没有成功,但是几个模块,以及它们似乎都追溯到试图编译CiftiLib主的一个问题。

按照指示,每当我尝试运行“制作”命令,它返回:

Makefile:34: warning: overriding recipe for target 'clean'
/home/thosvarley/Desktop/fslbuild/fsl/config/common/rules.mk:32: warning: ignoring old recipe for target 'clean'
gcc -c -Wall -ansi -pedantic -Wno-long-long     -m64  -g -O3 -fexpensive-optimizations -m64  -I/home/thosvarley/Desktop/fslbuild/fsl/extras/include/boost -g -DCIFTILIB_USE_XMLPP -I/home/thosvarley/Desktop/fslbuild/fsl/extras/include -I/home/thosvarley/Desktop/fslbuild/fsl/extras/include/libxml2 -I/home/thosvarley/Desktop/fslbuild/fsl/extras/include/libxml++-2.6 -I/home/thosvarley/Desktop/fslbuild/fsl/extras/lib/libxml++-2.6/include -I/home/thosvarley/Desktop/fslbuild/fsl/extras/include/boost -I./Common -I./Nifti -I./Cifti  -I. -I/include -I/home/thosvarley/Desktop/fslbuild/fsl/include  -o Common/XmlAdapter.o Common/XmlAdapter.cxx
In file included from Common/XmlAdapter.cxx:28:0:
Common/XmlAdapter.h:56:10: fatal error: libxml++/libxml++.h: No such file or directory
 #include "libxml++/libxml++.h"
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:19: Common/XmlAdapter.o] Error 1

因为我不想要编译一个foo.c的文件,而是使程序很多我见过似乎并不像它会适用于我的建议。我已经安装了所有的建议得到其他职位(libxml2的,libxslt1等)的各种libxml的软件包。

我不能让元首或错误消息的尾巴:我不熟悉,在所有编译C程序(这是我的第一次严重的涉足从源大厦)。提前道歉,如果答案是显而易见的,我只是不承认它。

我在Antergos的Linux(内核拱),我认为这可能是问题的根源所在,从所有在这之后谁问了其他人似乎是在Debian或Ubuntu的到来。

linux makefile compiler-errors libxml2 neuroscience
1个回答
0
投票

我一直在试图解决同样的问题。看来的libxml ++捆绑默认FSL,并捆绑版本编译失败。

解决方案#1:安装并使用较旧的编译器(例如GCC 4.8),因为该项目的配置都是为了满足那些老的编译器

我不能保证这个解决方案,因为我还没有尝试过自己(因为很明显,我想难为我自己),但它可能是你最好的选择。

溶液#2:手动解决这些问题

注意:这不是一个全面的解决方案,但它可能为你指明正确方向。

你的第一个问题是最有可能是因为您在默认情况下使用编译器使用比项目被写入与编译一个较新的C ++标准。这将导致输入流和输出流,以布尔值到失败隐式转换。您可能能够通过乱搞在makefile文件配置编译器标志来解决它,但它可能更容易刚修好的代码问题的部分。相关线(FSL 5.0.11)是:

- extras/src/libxml++-2.34.0/libxml++/io/istreamparserinputbuffer.cc (line 42)
  return _input;
  SHOULD BE
  return static_cast<bool>(_input);

- extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc (line 32)
  return _output;
  SHOULD BE
  return static_cast<bool>(_output);

- extras/src/libxml++-2.34.0/libxml++/io/ostreamoutputbuffer.cc (line 39)
  return _output;
  SHOULD BE
  return static_cast<bool>(_output);

根据你想安装的版本,实际的行号可能会有所不同,但他们可能是在同一地区。

接下来的问题是,包含路径没有为INC_XML++INC_XML++CONFINC_XML2在通用生成文件配置中定义。这是最有可能的一个系统默认为,因为是GCC版本> 4.8没有配置。通过添加以下行(其中正是你添加它并不重要)编辑config/generic/externallibs.mk文件:

# XML++
LIB_XML++ = ${FSLEXTLIB}
INC_XML++ = ${FSLEXTINC}/libxml++-2.6
INC_XML++CONF = ${FSLEXTLIB}/libxml++-2.6/include
INC_XML2 = ${FSLEXTINC}/libxml2

(我addeed的LIB_XML ++的好办法,因为库路径是由该文件中其他变量定义的,但我不是100%肯定它是必要的。)

再次,这是固定的,我的系统上。根据你下载的源代码的版本,它可能是你不同,但至少这是一个起点。

修复这些错误后,CiftiLib主目标应该编译。但是,如果你的系统是像我这样的事情,这是远远在构建过程中唯一的错误。纵观build.log文件和搜索error:应该给你,其中一个不错的主意项目结果,其中的错误,并且可能需要什么来解决这些问题。这些问题很可能是在性质上CiftiLib那些相似。

最后提示:如果您的libgd项目编译失败,看看error:消息。它可能会抱怨一些未申报的标识符(IMG_FMT_I420PLANE_YPLANE_UPLANE_V)。如果这些前缀与标识VPX_,它应该工作。失败的原因是由于更新到删除过时标识的定义,强迫用户使用较新的前缀那些图书馆。

这是据我已经来了。我假设你是不是还在这个困扰了一年之后,但我在这里离开这个给后人。

© www.soinside.com 2019 - 2024. All rights reserved.