从 PTSG 错误编译 Xoopic

从 PTSG 错误编译 Xoopic

如下所示,我遇到了 hdf5.h fftw.h 和 dfttw.h 错误。这些都找不到,我已指定除 dfttw.h 之外的位置,因为我在任何地方都找不到它。我还遇到了大量版本错误,但我似乎找不到确切需要的版本。

~/Documents/xoopic$ TCL_LIBDIR_PATH=/usr/lib/x86_64-linux-gnu/ TK_LIBDIR_PATH=/usr/lib/x86_64-linux-gnu/ ./configure --with-tclsh=/usr/bin/tclsh8.5 --with-tclconfig=/usr/lib/tcl8.5 --with-tkconfig=/usr/lib/tk8.5 --with-tclhdir=/usr/include/tcl8.5 --with-tkhdir=/usr/include/tcl8.5 --with-sfftw-incdir=/usr/include/sfftw.h --with-hdf5-incdir=/usr/include/hdf5/serial/hdf5.h
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
using HDF5? ... yes
checking for hdf5.h... no
configure: WARNING: hdf5.h not found in /usr/include/hdf5/serial/hdf5.h.  Use --with-hdf5-incdir=
grep: /usr/include/hdf5/serial/hdf5.h/H5pubconf.h: Not a directory
Failed to find serial build of HDF5 in obvious location. Setting _SERIAL vars
to be the same as the parallel vars so as not to break the vpdatanal builds.
configure: WARNING: hdf5 not properly installed -- Turning off hdf5.
Using C++ compiler g++
Using C compiler gcc
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking for library containing strerror... none required
checking whether time.h and sys/time.h may both be included... yes
checking for BSD-compatible nm... 
install-sh/usr/bin/nm -B
Setting the flags per system and C++ compiler: g++
checking for g++... /usr/bin/g++
Serial C++ compiler is `g++'
checking g++ version... g++
configure: WARNING: Caution: version  is not known to work.
checking for -fsquangle... no
checking how to build libraries... with ar cr  
checking for gcc... /usr/bin/gcc
Serial C compiler is `gcc'
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking dependency style of gcc... (cached) gcc3
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking how to run the C preprocessor... gcc -E
checking how to run the C++ preprocessor... g++ -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking iostream usability... yes
checking iostream presence... yes
checking for iostream... yes
checking strstream usability... yes
checking strstream presence... yes
checking for strstream... yes
checking fstream usability... yes
checking fstream presence... yes
checking for fstream... yes
checking sstream usability... yes
checking sstream presence... yes
checking for sstream... yes
checking for size_t... yes
checking whether struct tm is in sys/time.h or time.h... time.h
Calling config/macros.m4
Calling config/cxx.m4
checking whether c++ compiler supports exception handling... yes
checking whether c++ compiler supports typename... yes
checking whether c++ compiler can explicitly instantiate templates... yes
checking whether c++ compiler supports RTTI... yes
checking whether c++ compiler supports namespaces... yes
checking whether c++ compiler has complex in the namespace std... yes
checking whether c++ compiler has streams in the namespace std... yes
checking whether c++ compiler can overload const type conversions... yes
checking whether c++ compiler knows mutable... yes
checking whether template friends need brackets... yes
checking whether nontype template operators are allowed... no
checking whether static variables can be declared generally... yes
config/cxx.m4 finished
checking whether make sets $(MAKE)... (cached) yes
checking whether ln -s works... yes
checking for ranlib... ranlib
checking what the library suffix is... .a
checking how to install libraries... with ${INSTALL} -m 644
configure: WARNING: x11.m4 is obsolete.  Please use AC_PATH_X or AC_PATH_XTRA.
checking for X11/Xlib.h... /usr/include/X11/Xlib.h
checking for libX11.a... /usr/lib/x86_64-linux-gnu/libX11.a
checking for libXpm.a... /usr/lib/x86_64-linux-gnu/libXpm.a
checking for libXGC250.a... /usr/local/lib/libXGC250.a
checking for xgrafix.h... /usr/local/include/xgrafix.h
checking for xgscalar.h... /usr/local/include/xgscalar.h
checking for SCALAR in /usr/local/include/xgscalar.h... #define SCALAR double
checking for tclsh... /usr/bin/tclsh8.5
checking for tclConfig.sh... /usr/lib/tcl8.5/tclConfig.sh
checking for tkConfig.sh... /usr/lib/tk8.5/tkConfig.sh
checking for libtcl8.5.a... /usr/lib/x86_64-linux-gnu/
checking for libtk8.5.a... /usr/lib/x86_64-linux-gnu/
checking for up-to-date Tcl version in tcl.h... 8.5
Warning: The Tcl version in /usr/include/tcl8.5/tcl.h is not in the legal Tcl versions list!
tcl_version:  NONE
TCL_MAJOR_VERSION:  8
TCL_MINOR_VERSION:  5
checking for up-to-date Tk version in tk.h... 8.5
Warning: The Tk version in /usr/include/tcl8.5/tcl.h is not in the legal Tk versions list!
tk_version:  NONE
TK_MAJOR_VERSION:  8
TK_MINOR_VERSION:  5
Checking for fftw...
checking for dfftw.h... no
configure: WARNING: dfftw.h not found in /home/nickallen/include:/usr/local/fftw/include:/loc/fftw/include:/local/fftw/include:/usr/common/usg/include:/usr/include.  Set location with --with-dfftw-incdir=
checking for sfftw.h... no
configure: WARNING: sfftw.h not found in /usr/include/sfftw.h.  Set location with --with-sfftw-incdir=
Making Makefiles
configure: creating ./config.status
config.status: creating Makefile
config.status: creating otools/Makefile
config.status: creating advisor/Makefile
config.status: creating physics/Makefile
config.status: creating xg/Makefile
config.status: creating config/Makefile
config.status: creating ./config.h
config.status: ./config.h is unchanged
config.status: executing depfiles commands

我修复了与 fftw.h、dfftw.h 和 hdf5 相关的问题。我剩下的唯一问题是找不到 gawk 和 h5diff。您知道这是否会对其产生任何影响吗?

        ~/Documents/xoopic$ TCL_LIBDIR_PATH=/usr/lib/x86_64-linux-gnu/ \
> TK_LIBDIR_PATH=/usr/lib/x86_64-linux-gnu/  \
> ./configure \
> --with-tclsh=/usr/bin/tclsh8.5 \
> --with-tclconfig=/usr/lib/tcl8.5 \
> --with-tkconfig=/usr/lib/tk8.5 \
> --with-tclhdir=/usr/include/tcl8.5 \
> --with-tkhdir=/usr/include/tcl8.5 \
> --with-dfftw-incdir=/usr/local/include \
> --with-sfftw-incdir=/usr/include \
> --enable-hdf5 \
>  --with-hdf5-incdir=/usr/include/hdf5/serial \
>  --with-hdf5-libdir=/usr/lib/x86_64-linux-gnu/hdf5/serial
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
using HDF5? ... yes
checking for hdf5.h... /usr/include/hdf5/serial/hdf5.h
checking for libhdf5.a... /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.a
checking for h5diff... no
Using C++ compiler g++
Using C compiler gcc
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking for library containing strerror... none required
checking whether time.h and sys/time.h may both be included... yes
checking for BSD-compatible nm... 
install-sh/usr/bin/nm -B
Setting the flags per system and C++ compiler: g++
checking for g++... /usr/bin/g++
Serial C++ compiler is `g++'
checking g++ version... g++
configure: WARNING: Caution: version  is not known to work.
checking for -fsquangle... no
checking how to build libraries... with ar cr  
checking for gcc... /usr/bin/gcc
Serial C compiler is `gcc'
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking dependency style of gcc... (cached) gcc3
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking how to run the C preprocessor... gcc -E
checking how to run the C++ preprocessor... g++ -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking iostream usability... yes
checking iostream presence... yes
checking for iostream... yes
checking strstream usability... yes
checking strstream presence... yes
checking for strstream... yes
checking fstream usability... yes
checking fstream presence... yes
checking for fstream... yes
checking sstream usability... yes
checking sstream presence... yes
checking for sstream... yes
checking for size_t... yes
checking whether struct tm is in sys/time.h or time.h... time.h
Calling config/macros.m4
Calling config/cxx.m4
checking whether c++ compiler supports exception handling... yes
checking whether c++ compiler supports typename... yes
checking whether c++ compiler can explicitly instantiate templates... yes
checking whether c++ compiler supports RTTI... yes
checking whether c++ compiler supports namespaces... yes
checking whether c++ compiler has complex in the namespace std... yes
checking whether c++ compiler has streams in the namespace std... yes
checking whether c++ compiler can overload const type conversions... yes
checking whether c++ compiler knows mutable... yes
checking whether template friends need brackets... yes
checking whether nontype template operators are allowed... no
checking whether static variables can be declared generally... yes
config/cxx.m4 finished
checking whether make sets $(MAKE)... (cached) yes
checking whether ln -s works... yes
checking for ranlib... ranlib
checking what the library suffix is... .a
checking how to install libraries... with ${INSTALL} -m 644
configure: WARNING: x11.m4 is obsolete.  Please use AC_PATH_X or AC_PATH_XTRA.
checking for X11/Xlib.h... /usr/include/X11/Xlib.h
checking for libX11.a... /usr/lib/x86_64-linux-gnu/libX11.a
checking for libXpm.a... /usr/lib/x86_64-linux-gnu/libXpm.a
checking for libXGC250.a... /usr/local/lib/libXGC250.a
checking for xgrafix.h... /usr/local/include/xgrafix.h
checking for xgscalar.h... /usr/local/include/xgscalar.h
checking for SCALAR in /usr/local/include/xgscalar.h... #define SCALAR double
checking for tclsh... /usr/bin/tclsh8.5
checking for tclConfig.sh... /usr/lib/tcl8.5/tclConfig.sh
checking for tkConfig.sh... /usr/lib/tk8.5/tkConfig.sh
checking for libtcl8.5.a... /usr/lib/x86_64-linux-gnu/
checking for libtk8.5.a... /usr/lib/x86_64-linux-gnu/
checking for up-to-date Tcl version in tcl.h... 8.5
Warning: The Tcl version in /usr/include/tcl8.5/tcl.h is not in the legal Tcl versions list!
tcl_version:  NONE
TCL_MAJOR_VERSION:  8
TCL_MINOR_VERSION:  5
checking for up-to-date Tk version in tk.h... 8.5
Warning: The Tk version in /usr/include/tcl8.5/tcl.h is not in the legal Tk versions list!
tk_version:  NONE
TK_MAJOR_VERSION:  8
TK_MINOR_VERSION:  5
Checking for fftw...
checking for dfftw.h... /usr/local/include/dfftw.h
checking for libdfftw.a... /usr/local/lib/libdfftw.a
checking for sfftw.h... /usr/include/sfftw.h
checking for libsfftw.a... /usr/lib/libsfftw.a
Making Makefiles
configure: creating ./config.status
config.status: creating Makefile
config.status: creating otools/Makefile
config.status: creating advisor/Makefile
config.status: creating physics/Makefile
config.status: creating xg/Makefile
config.status: creating config/Makefile
config.status: creating ./config.h
config.status: ./config.h is unchanged
config.status: executing depfiles commands

修复 h5diff 问题之后,我转向 make,但在使用 hdf5 时遇到了更多问题。

    ~/Documents/xoopic$ make
make  all-recursive
make[1]: Entering directory '/home/nickallen/Documents/xoopic'
Making all in otools
make[2]: Entering directory '/home/nickallen/Documents/xoopic/otools'
g++ -DHAVE_CONFIG_H -I. -I../. -I../advisor -I../physics -I../otools -I../otools -I../config  -I/usr/local/include  -I/usr/local/include  -I/usr/include/hdf5/serial    -Wall -Wno-unused  -g -O2 -pipe -g -O2 -pipe   -DUNIX  -DSCALAR_DOUBLE   -c -o dumpHDF5.o dumpHDF5.cpp
dumpHDF5.cpp: In member function ‘void dumpHDF5::readSimple(std::string, double*, int&)’:
dumpHDF5.cpp:126:46: error: too few arguments to function ‘hid_t H5Dopen2(hid_t, const char*, hid_t)’
   datasetId = H5Dopen(fileId,dataPath.c_str());
                                              ^
In file included from /usr/include/hdf5/serial/hdf5.h:27:0,
                 from dumpHDF5.h:20,
                 from dumpHDF5.cpp:12:
/usr/include/hdf5/serial/H5Dpublic.h:123:14: note: declared here
 H5_DLL hid_t H5Dopen2(hid_t file_id, const char *name, hid_t dapl_id);
              ^
dumpHDF5.cpp: In member function ‘void dumpHDF5::writeSimple(std::string, double*, int, int*)’:
dumpHDF5.cpp:161:84: error: too few arguments to function ‘hid_t H5Dcreate2(hid_t, const char*, hid_t, hid_t, hid_t, hid_t, hid_t)’
  datasetId = H5Dcreate(fileId, dataPath.c_str(), h5Scalar, dataspaceId, H5P_DEFAULT);
                                                                                    ^
In file included from /usr/include/hdf5/serial/hdf5.h:27:0,
                 from dumpHDF5.h:20,
                 from dumpHDF5.cpp:12:
/usr/include/hdf5/serial/H5Dpublic.h:119:14: note: declared here
 H5_DLL hid_t H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id,
              ^
Makefile:484: recipe for target 'dumpHDF5.o' failed
make[2]: *** [dumpHDF5.o] Error 1
make[2]: Leaving directory '/home/nickallen/Documents/xoopic/otools'
Makefile:389: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/nickallen/Documents/xoopic'
Makefile:327: recipe for target 'all' failed
make: *** [all] Er

ror 2

答案1

只需安装正确的软件包:

sudo apt-get install sfftw-dev
sudo apt-get install libhdf5-dev

答案2

sudo apt-get 安装 apt-file
sudo apt-file 更新
apt-file 搜索 -x /hdf5.h$

应该屈服

libflann-dev:/usr/include/flann/io/hdf5.h
libhdf5-dev:/usr/include/hdf5/serial/hdf5.h
libhdf5-mpich-dev:/usr/include/hdf5/mpich/hdf5.h
libhdf5-openmpi-dev:/usr/include/hdf5/openmpi/hdf5.h
libopencv-flann-dev:/usr/include/opencv2/flann/hdf5.h

我不知道您想要哪一个,但libhdf5-dev听起来是个不错的选择。

必要时请重复。

答案3

注意:潜在的问题可能是您尝试构建的软件的配置基于过时的 GNU autotools 系统版本。正确的修复此问题的方法可能是修改脚本并重新生成更合适的./configure脚本:如果我正确理解了该过程,autoreconf应该可以解决这个问题,但似乎造成的问题比修复的问题还多。以下方法充其量只是一种 hack。


据我所知,sd前缀fftw仅表示单精度和双精度。

至少在当前版本的 Ubuntu 中,虽然单精度开发头文件和库被打包为sfftw-dev,但(默认)双精度开发包只是被简单调用fftw-dev,并且相应的头文件和库也缺少前缀d

思考一个可接受的解决方法是简单地对丢失的文件进行符号链接,例如(您不必在这里使用 /usr/local - 我只是认为它可以做出更清晰的区分):

sudo ln -s /usr/include/fftw.h /usr/local/include/dfftw.h
sudo ln -s /usr/include/rfftw.h /usr/local/include/drfftw.h

sudo ln -s /usr/lib/libfftw.a /usr/local/lib/libdfftw.a
sudo ln -s /usr/lib/libfftw.so /usr/local/lib/libdfftw.so

sudo ln -s /usr/lib/librfftw.a /usr/local/lib/libdrfftw.a
sudo ln -s /usr/lib/librfftw.so /usr/local/lib/libdrfftw.so

然后按照上面的例子,

TCL_LIBDIR_PATH=/usr/lib/x86_64-linux-gnu/ TK_LIBDIR_PATH=/usr/lib/x86_64-linux-gnu/ ./configure \
  --with-tclsh=/usr/bin/tclsh8.5 \
  --with-tclconfig=/usr/lib/tcl8.5 \
  --with-tkconfig=/usr/lib/tk8.5 \
  --with-tclhdir=/usr/include/tcl8.5 \
  --with-tkhdir=/usr/include/tcl8.5 \
  --with-sfftw-incdir=/usr/include \
  --with-dfftw-incdir=/usr/local/include \
  --with-hdf5-libdir=/usr/lib/x86_64-linux-gnu

至少,我能够通过xoopic这种方式在 64 位 Ubuntu 14.04 上构建二进制文件 - 尽管我只使用它进行了测试,./xoopic --help因为我不熟悉该程序的正确用法。


我不认为找到失败gawk应该是一个问题,因为它似乎很满意mawk;但是gawk如果你愿意的话你可以从存储库安装 - IIRC 它会将自己设置为系统范围的默认值,awk尽管你可以轻松地将其设置回mawk通过update-alternatives

h5diff当我完成看似成功的构建时,我两者都没有,但你可以通过安装来获得它hdf5-tools。我发现仍然需要H5DIFF=/usr/bin/h5diff./configure命令行中添加一个 shell 变量定义,以便让脚本找到它。

相关内容