gpt4 book ai didi

c++ - 无法在 Mac OSX (Yosemite) 上安装 RNNLIB (http ://sourceforge.net/p/rnnl/wiki/Home/)

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:09 25 4
gpt4 key购买 nike

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

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

输出:

   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

这似乎令人不安

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

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

全部返回编号

然后我输入 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

我不确定如何解决这个问题。是什么导致了这些错误,我该如何消除它们?

最佳答案

看起来这是为 GNU C++ 编译器设计的(不是在 Yosemite 中伪装成 g++ 的 Clang 编译器),因此使用该编译器进行编译会更容易。

如果您没有 Homebrew package manager ,你可以通过执行安装它:

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

现在通过运行安装 gcc 4.9:

brew install gcc49

GNU C++ 编译器现在可用 g++-4.9 .

接下来,netcdf 的兼容版本必须安装库(不是最新的)。参见 this Stackoverflow question ,或直接下载 ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-cxx-4.2.tar.gz

一旦那个版本netcdf已提取,cd进入输出目录并运行以下命令(注意 CXX=g++-4.9 使用该编译器而不是默认编译器构建):

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

现在回到rnnlib本身:

您仍然需要应用一些补丁才能获得 rnnlibg++-4.9 编译(但打补丁比使用 Clang 少),如 this sourceforge thread 中所述.

四个定义range_min_size模板函数在首次用于 src/Helpers.hpp 之前需要移动. src/Container.hpp 还需要一个小补丁调用resize()方法为 this->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)));

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

您可以通过 cd 申请-进入你的rnnlib目录和运行:

patch -p1 < ../patch.txt

(将 patch.txt 替换为您命名的上述补丁文件)。

现在你必须运行 configure再次指定 g++-4.9 (所以它会选择我们刚刚构建的 netcdf 库),然后是 make :

CXX=g++-4.9 ./configure
make

现在您将拥有一个可用的 bin/rnnlib可执行文件(如果您愿意,可以使用 make install 安装)。

如果您确实需要 Clang,那么 this Stackoverflow question涉及导致您在问题中显示的编译错误的问题,因此 src/Helpers.hpp将需要更新以替换像 t.get<0> 这样的调用与 t.template get<0> ,但除此之外还有进一步的编译问题,因此使用 GNU C++ 构建更容易。

It seems troubling that

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

您不必为此担心; malloc.h不是标准头文件( mallocstdlib.h 中声明)。参见示例 this Stackoverflow answer .

关于c++ - 无法在 Mac OSX (Yosemite) 上安装 RNNLIB (http ://sourceforge.net/p/rnnl/wiki/Home/),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com