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中声明)。例如这个*答案。