不能在Mac OSX (Yosemite)上安装RNNLIB (http://sourceforge.net/p/rnnl/wiki/Home/)

时间:2021-09-21 09:44:04

Instructions are Here: http://sourceforge.net/p/rnnl/wiki/Home/

说明:http://sourceforge.net/p/rnnl/wiki/Home/

I type ./configure in root directory of RNNLIb folder.

在RNNLIb文件夹的根目录中键入./configure。

Output:

输出:

   checking for a BSD-compatible install... /usr/bin/install -c
   checking whether build environment is sane... yes
   checking for a thread-safe mkdir -p... build-aux/install-sh -c -d
   checking for gawk... no
   checking for mawk... no
   checking for nawk... no
   checking for awk... awk
   checking whether make sets $(MAKE)... yes
   checking for g++... g++
   checking for C++ compiler default output file name... a.out
   checking whether the C++ compiler works... yes
   checking whether we are cross compiling... no
   checking for suffix of executables... 
   checking for suffix of object files... o
   checking whether we are using the GNU C++ compiler... yes
   checking whether g++ accepts -g... yes
   checking for style of include used by make... GNU
   checking dependency style of g++... gcc3 
   checking for gcc... gcc
   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 a BSD-compatible install... /usr/bin/install -c
   checking for main in -lstdc++... yes
   checking for exp in -lm... yes
   checking for main in -lnetcdf... yes
   checking for main in -lnetcdf_c++... no
   checking how to run the C++ preprocessor... g++ -E
   checking for grep that handles long lines and -e... /usr/bin/grep
   checking for egrep... /usr/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 time.h usability... yes
   checking time.h presence... yes
   checking for time.h... yes
   checking malloc.h usability... no
   checking malloc.h presence... no
   checking for malloc.h... no
   configure: creating ./config.status
   config.status: creating Makefile
   config.status: creating src/Makefile
   config.status: creating config.h
   config.status: config.h is unchanged
   config.status: executing depfiles commands

It seems troubling that

似乎令人不安

    checking malloc.h usability... no
    checking malloc.h presence... no

and

    checking for main in -lnetcdf_c++... no

all return no.

所有返回no。

Then I type make, and I get:

然后输入make,然后得到:

  g++ -DHAVE_CONFIG_H -I. -I..     -g -O2 -MT DataExporter.o -MD -MP -MF     .deps/DataExporter.Tpo -c -o DataExporter.o DataExporter.cpp
  In file included from DataExporter.cpp:18:
  In file included from ./DataExporter.hpp:24:
 ./Helpers.hpp:724:18: error: expected expression
    out << t.get<0>() << " " << t.get<1>();
                    ^
 ./Helpers.hpp:724:39: error: expected expression
    out << t.get<0>() << " " << t.get<1>();
 ... A bunch more similar error messages ...
 In file included from DataExporter.cpp:18:
 In file included from ./DataExporter.hpp:25:
 In file included from ./SeqBuffer.hpp:21:
 In file included from ./MultiArray.hpp:31:
 ./Container.hpp:113:14: warning: reference 'front' is not yet bound   
 to a value
  when used within its own initialization [-Wuninitialized]
            T& front = front();
               ~~~~~   ^~~~~
 1 warning and 14 errors generated.
 make[2]: *** [DataExporter.o] Error 1
 make[1]: *** [all-recursive] Error 1
 make: *** [all] Error 2

I'm not sure how to fix this. What is causing these errors and how do I get rid of them?

我不知道该怎么解决这个问题。是什么导致了这些错误,我如何摆脱它们?

1 个解决方案

#1


0  

Looks like this was intended for the GNU C++ compiler (not the Clang compiler masquerading as g++ in Yosemite), so it will be easier to get this compiling with that compiler.

看起来这是为GNU c++编译器而设计的(不是在Yosemite中使用g++的Clang编译器),所以用编译器编译这个编译器会更容易。

If you don't have the Homebrew package manager, you can install it by executing:

如果您没有Homebrew包管理器,您可以通过执行来安装它:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Now install gcc 4.9 by running:

现在通过运行安装gcc 4.9:

brew install gcc49

The GNU C++ compiler will now be available as g++-4.9.

GNU c++编译器现在可用作g++-4.9。

Next, a compatible version of the netcdf library will have to be installed (not the latest one). See this * question, or just download ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-cxx-4.2.tar.gz

接下来,必须安装netcdf库的兼容版本(而不是最新版本)。查看这个*问题,或者直接下载ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf/netcdf -cxx-4.2.tar.gz。

Once that version of netcdf has been extracted, cd into the output directory and run the following (note the CXX=g++-4.9 to build with that compiler instead of the default):

一旦netcdf的版本被提取出来,cd进入输出目录并运行如下(注意CXX=g++-4.9,以编译而不是默认编译):

CXX=g++-4.9 ./configure
make
make install
make check

Now back to rnnlib itself:

现在回到rnnlib本身:

You'll still need to apply some patches to get rnnlib to compile with g++-4.9 (but less patching than if you used Clang), as mentioned on this sourceforge thread.

您仍然需要使用一些补丁来使用g++-4.9(但是比使用Clang更少的补丁)来编译rnnlib,正如在这个sourceforge线程中所提到的那样。

The definition of the four range_min_size template functions need to be moved before they are first used in src/Helpers.hpp. A small patch is also needed to src/Container.hpp to call the resize() method as this->resize(). Here's the patch:

四个range_min_size模板函数的定义需要在src/Helpers.hpp中首次使用之前被移动。src/Container也需要一小块补丁。hpp调用resize()方法为->resize()。补丁:

diff -Naur rnnlib_orig/src/Container.hpp rnnlib_gcc_test/src/Container.hpp
--- rnnlib_orig/src/Container.hpp   2013-08-16 11:00:38.000000000 +0100
+++ rnnlib_gcc_test/src/Container.hpp   2015-03-18 21:30:11.000000000 +0000
@@ -154,7 +154,7 @@
    }
    template<class R> Vector<T>& operator =(const R& r)
    {
-       resize(boost::size(r));
+       this->resize(boost::size(r));
        copy(r, *this);
        return *this;
    }
diff -Naur rnnlib_orig/src/Helpers.hpp rnnlib_gcc_test/src/Helpers.hpp
--- rnnlib_orig/src/Helpers.hpp 2013-08-20 10:39:39.000000000 +0100
+++ rnnlib_gcc_test/src/Helpers.hpp 2015-03-18 21:29:47.000000000 +0000
@@ -296,6 +296,22 @@
    }
    return count;
 }
+template<class R1, class R2> static size_t range_min_size (const R1& a, const R2& b)
+{
+        return min(boost::size(a), boost::size(b));
+}
+template<class R1, class R2, class R3> static size_t range_min_size (const R1& a, const R2& b, const R3& c)
+{
+        return min(min(boost::size(a), boost::size(b)), boost::size(c));
+}
+template<class R1, class R2, class R3, class R4> static size_t range_min_size (const R1& a, const R2& b, const R3& c, const R4& d)
+{
+        return min(min(min(boost::size(a), boost::size(b)), boost::size(c)), boost::size(d));
+}
+template<class R1, class R2, class R3, class R4, class R5> static size_t range_min_size (const R1& a, const R2& b, const R3& c, const R4& d, const R5& e)
+{
+        return min(min(min(min(boost::size(a), boost::size(b)), boost::size(c)), boost::size(d)), boost::size(e));
+}
 template <class R1, class R2> static pair<zip_iterator<tuple<typename range_iterator<R1>::type, typename range_iterator<R2>::type> >,
                                            zip_iterator<tuple<typename range_iterator<R1>::type, typename range_iterator<R2>::type> > > 
 zip(R1& r1, R2& r2)
@@ -529,22 +545,6 @@
        delete *it;
    }
 }
-template<class R1, class R2> static size_t range_min_size (const R1& a, const R2& b)
-{
-   return min(boost::size(a), boost::size(b));
-}
-template<class R1, class R2, class R3> static size_t range_min_size (const R1& a, const R2& b, const R3& c)
-{
-   return min(min(boost::size(a), boost::size(b)), boost::size(c));
-}
-template<class R1, class R2, class R3, class R4> static size_t range_min_size (const R1& a, const R2& b, const R3& c, const R4& d)
-{
-   return min(min(min(boost::size(a), boost::size(b)), boost::size(c)), boost::size(d));
-}
-template<class R1, class R2, class R3, class R4, class R5> static size_t range_min_size (const R1& a, const R2& b, const R3& c, const R4& d, const R5& e)
-{
-   return min(min(min(min(boost::size(a), boost::size(b)), boost::size(c)), boost::size(d)), boost::size(e));
-}
 template <class R> static int arg_max(const R& r)
 {
    return distance(boost::begin(r), max_element(boost::begin(r), boost::end(r)));

Or download this patch from Github gist as it will be less error-prone: https://gist.github.com/0David/13d872c88172c75d4663

或者从Github的要点上下载这个补丁,因为它不会容易出错:https://gist.github.com/0David/13d872c88172c75d4663。

You can apply this by cd-ing into your rnnlib directory and running:

您可以将其应用到rnnlib目录中并运行:

patch -p1 < ../patch.txt

(replacing patch.txt with whatever you named the above patch file).

(替换补丁。txt与你命名的上面的补丁文件。

Now you'll have to run configure again specifying g++-4.9 (and so it will pick up the netcdf library we just built), and then make:

现在,您将不得不再次运行configure,指定g++-4.9(因此它将接收我们刚刚构建的netcdf库),然后进行:

CXX=g++-4.9 ./configure
make

And you'll now have a working bin/rnnlib executable (which you can install with make install if you wish).

现在,您将拥有一个可工作的bin/rnnlib可执行文件(如果您愿意,可以安装它以进行安装)。

If you do need Clang, then this * question touches on the issue that's causing the compilation error that you show in the question, so src/Helpers.hpp will need to be updated to replace calls like t.get<0> with t.template get<0>, but there are further compilation problems beyond that, so it's easier just to build with GNU C++.

如果您确实需要Clang,那么这个*问题涉及到导致您在问题中显示的编译错误的问题,所以src/ helper。hpp需要更新,以替换t这样的调用。能与t < 0 >。模板得到<0>,但是除此之外还有更多的编译问题,所以用GNU c++来构建更容易。

It seems troubling that

似乎令人不安

checking malloc.h usability... no
checking malloc.h presence... no

You don't need to worry about that; malloc.h isn't a standard header file (malloc is declared in stdlib.h). See for example this * answer.

你不需要担心;malloc。h不是标准头文件(malloc在stdlib.h中声明)。例如这个*答案。

#1


0  

Looks like this was intended for the GNU C++ compiler (not the Clang compiler masquerading as g++ in Yosemite), so it will be easier to get this compiling with that compiler.

看起来这是为GNU c++编译器而设计的(不是在Yosemite中使用g++的Clang编译器),所以用编译器编译这个编译器会更容易。

If you don't have the Homebrew package manager, you can install it by executing:

如果您没有Homebrew包管理器,您可以通过执行来安装它:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Now install gcc 4.9 by running:

现在通过运行安装gcc 4.9:

brew install gcc49

The GNU C++ compiler will now be available as g++-4.9.

GNU c++编译器现在可用作g++-4.9。

Next, a compatible version of the netcdf library will have to be installed (not the latest one). See this * question, or just download ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-cxx-4.2.tar.gz

接下来,必须安装netcdf库的兼容版本(而不是最新版本)。查看这个*问题,或者直接下载ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf/netcdf -cxx-4.2.tar.gz。

Once that version of netcdf has been extracted, cd into the output directory and run the following (note the CXX=g++-4.9 to build with that compiler instead of the default):

一旦netcdf的版本被提取出来,cd进入输出目录并运行如下(注意CXX=g++-4.9,以编译而不是默认编译):

CXX=g++-4.9 ./configure
make
make install
make check

Now back to rnnlib itself:

现在回到rnnlib本身:

You'll still need to apply some patches to get rnnlib to compile with g++-4.9 (but less patching than if you used Clang), as mentioned on this sourceforge thread.

您仍然需要使用一些补丁来使用g++-4.9(但是比使用Clang更少的补丁)来编译rnnlib,正如在这个sourceforge线程中所提到的那样。

The definition of the four range_min_size template functions need to be moved before they are first used in src/Helpers.hpp. A small patch is also needed to src/Container.hpp to call the resize() method as this->resize(). Here's the patch:

四个range_min_size模板函数的定义需要在src/Helpers.hpp中首次使用之前被移动。src/Container也需要一小块补丁。hpp调用resize()方法为->resize()。补丁:

diff -Naur rnnlib_orig/src/Container.hpp rnnlib_gcc_test/src/Container.hpp
--- rnnlib_orig/src/Container.hpp   2013-08-16 11:00:38.000000000 +0100
+++ rnnlib_gcc_test/src/Container.hpp   2015-03-18 21:30:11.000000000 +0000
@@ -154,7 +154,7 @@
    }
    template<class R> Vector<T>& operator =(const R& r)
    {
-       resize(boost::size(r));
+       this->resize(boost::size(r));
        copy(r, *this);
        return *this;
    }
diff -Naur rnnlib_orig/src/Helpers.hpp rnnlib_gcc_test/src/Helpers.hpp
--- rnnlib_orig/src/Helpers.hpp 2013-08-20 10:39:39.000000000 +0100
+++ rnnlib_gcc_test/src/Helpers.hpp 2015-03-18 21:29:47.000000000 +0000
@@ -296,6 +296,22 @@
    }
    return count;
 }
+template<class R1, class R2> static size_t range_min_size (const R1& a, const R2& b)
+{
+        return min(boost::size(a), boost::size(b));
+}
+template<class R1, class R2, class R3> static size_t range_min_size (const R1& a, const R2& b, const R3& c)
+{
+        return min(min(boost::size(a), boost::size(b)), boost::size(c));
+}
+template<class R1, class R2, class R3, class R4> static size_t range_min_size (const R1& a, const R2& b, const R3& c, const R4& d)
+{
+        return min(min(min(boost::size(a), boost::size(b)), boost::size(c)), boost::size(d));
+}
+template<class R1, class R2, class R3, class R4, class R5> static size_t range_min_size (const R1& a, const R2& b, const R3& c, const R4& d, const R5& e)
+{
+        return min(min(min(min(boost::size(a), boost::size(b)), boost::size(c)), boost::size(d)), boost::size(e));
+}
 template <class R1, class R2> static pair<zip_iterator<tuple<typename range_iterator<R1>::type, typename range_iterator<R2>::type> >,
                                            zip_iterator<tuple<typename range_iterator<R1>::type, typename range_iterator<R2>::type> > > 
 zip(R1& r1, R2& r2)
@@ -529,22 +545,6 @@
        delete *it;
    }
 }
-template<class R1, class R2> static size_t range_min_size (const R1& a, const R2& b)
-{
-   return min(boost::size(a), boost::size(b));
-}
-template<class R1, class R2, class R3> static size_t range_min_size (const R1& a, const R2& b, const R3& c)
-{
-   return min(min(boost::size(a), boost::size(b)), boost::size(c));
-}
-template<class R1, class R2, class R3, class R4> static size_t range_min_size (const R1& a, const R2& b, const R3& c, const R4& d)
-{
-   return min(min(min(boost::size(a), boost::size(b)), boost::size(c)), boost::size(d));
-}
-template<class R1, class R2, class R3, class R4, class R5> static size_t range_min_size (const R1& a, const R2& b, const R3& c, const R4& d, const R5& e)
-{
-   return min(min(min(min(boost::size(a), boost::size(b)), boost::size(c)), boost::size(d)), boost::size(e));
-}
 template <class R> static int arg_max(const R& r)
 {
    return distance(boost::begin(r), max_element(boost::begin(r), boost::end(r)));

Or download this patch from Github gist as it will be less error-prone: https://gist.github.com/0David/13d872c88172c75d4663

或者从Github的要点上下载这个补丁,因为它不会容易出错:https://gist.github.com/0David/13d872c88172c75d4663。

You can apply this by cd-ing into your rnnlib directory and running:

您可以将其应用到rnnlib目录中并运行:

patch -p1 < ../patch.txt

(replacing patch.txt with whatever you named the above patch file).

(替换补丁。txt与你命名的上面的补丁文件。

Now you'll have to run configure again specifying g++-4.9 (and so it will pick up the netcdf library we just built), and then make:

现在,您将不得不再次运行configure,指定g++-4.9(因此它将接收我们刚刚构建的netcdf库),然后进行:

CXX=g++-4.9 ./configure
make

And you'll now have a working bin/rnnlib executable (which you can install with make install if you wish).

现在,您将拥有一个可工作的bin/rnnlib可执行文件(如果您愿意,可以安装它以进行安装)。

If you do need Clang, then this * question touches on the issue that's causing the compilation error that you show in the question, so src/Helpers.hpp will need to be updated to replace calls like t.get<0> with t.template get<0>, but there are further compilation problems beyond that, so it's easier just to build with GNU C++.

如果您确实需要Clang,那么这个*问题涉及到导致您在问题中显示的编译错误的问题,所以src/ helper。hpp需要更新,以替换t这样的调用。能与t < 0 >。模板得到<0>,但是除此之外还有更多的编译问题,所以用GNU c++来构建更容易。

It seems troubling that

似乎令人不安

checking malloc.h usability... no
checking malloc.h presence... no

You don't need to worry about that; malloc.h isn't a standard header file (malloc is declared in stdlib.h). See for example this * answer.

你不需要担心;malloc。h不是标准头文件(malloc在stdlib.h中声明)。例如这个*答案。