2

我正在尝试使用使用 g++ 的示例库 Mocapy++。

通过调用安装时cmake .出现此错误:

-- Boost version: 1.52.0
-- Boost version: 1.52.0
-- Found the following Boost libraries:
--   serialization
--   program_options
--   thread
running /usr/bin/cmake -E create_symlink "/home/vishalnus/Downloads/Mocapy++-1.07 /examples/data" "/home/vishalnus/Downloads/Mocapy++-1.07/examples/data"  2>&1
-- Could NOT find Boost
-- Could NOT find Boost
-- Could NOT find Boost
-- Could NOT find Boost
-- Boost version: 1.52.0
-- Found the following Boost libraries:
--   serialization
-- Could NOT find Boost
-- Boost version: 1.52.0
-- Found the following Boost libraries:
--   serialization
-- Could NOT find Boost
-- Configuring done
-- Generating done
-- Build files have been written to: <home>/Downloads/Mocapy++-1.07

现在,如果我尝试调用make我会得到错误:

[  1%] Building CXX object src/CMakeFiles/Mocapy.dir/discrete/discretedensities.cpp.o
In file included from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/../framework/../utils/utils.h:47:0,
from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/../framework/essbase.h:29,
from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/discreteess.h:24,
from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/discretepriors.h:31,
from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/densitiesbase.h:30,
from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/discretedensities.h:29,
from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/discretedensities.cpp:22:
/home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/../framework/../utils/mdarray.h: In instantiation of ‘void mocapy::MDArray<T>::clip(double, double) [with T = double]’:
/home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/discretedensities.cpp:61:32:   required from here
/home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/../framework/../utils/mdarray.h:1252:4: error: ‘max’ was not declared in this scope, andno declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
  In file included from /usr/include/c++/4.7/bits/char_traits.h:41:0,
             from /usr/include/c++/4.7/ios:41,
             from /usr/include/c++/4.7/ostream:40,
             from /usr/local/include/boost/archive/text_oarchive.hpp:19,
             from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/discretedensities.h:25,
             from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/discretedensities.cpp:22:
 /usr/include/c++/4.7/bits/stl_algobase.h:254:5: note: ‘template<class _Tp, class _Compare> const _Tp& std::max(const _Tp&, const _Tp&, _Compare)’ declared here, later in the translation unit
 In file included from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/../framework/../utils/utils.h:47:0,
 from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/../framework/essbase.h:29,
 from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/discreteess.h:24,
 from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/discretepriors.h:31,
 from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/densitiesbase.h:30,
 from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/discretedensities.h:29,
 from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/discretedensities.cpp:22:
 /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/../framework/../discrete/../framework/../utils/mdarray.h:1253:4: error: ‘min’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   In file included from /usr/include/c++/4.7/bits/char_traits.h:41:0,
             from /usr/include/c++/4.7/ios:41,
             from /usr/include/c++/4.7/ostream:40,
             from /usr/local/include/boost/archive/text_oarchive.hpp:19,
             from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/discretedensities.h:25,
             from /home/vishalnus/Downloads/Mocapy++-1.07/src/discrete/discretedensities.cpp:22:
  /usr/include/c++/4.7/bits/stl_algobase.h:233:5: note: ‘template<class _Tp, class _Compare> const _Tp& std::min(const _Tp&, const _Tp&, _Compare)’ declared here, later in the translation unit
  make[2]: *** [src/CMakeFiles/Mocapy.dir/discrete/discretedensities.cpp.o] Error 1
  make[1]: *** [src/CMakeFiles/Mocapy.dir/all] Error 2
  make: *** [all] Error 2

请让我知道该怎么做。谢谢!

4

1 回答 1

2

CMake 过程中没有错误(似乎您可以忽略有关找不到 Boost 的多条消息)。

但是Mocapy++ 代码中有一个错误,它试图使用 min/max 而不是 std::min/std::max,这就是编译失败的原因(并且在最新版本中仍然失败)。

如果你想修复它,编辑src/utils/mdarray.h,找到MDArray<T>::clip函数并替换这两行:

values[i] = max(minimum, values[i]);
values[i] = min(maximum, values[i]);

和:

values[i] = std::max(minimum, values[i]);
values[i] = std::min(maximum, values[i]);

输入“make”,等待并享受 :)

于 2013-06-13T10:03:41.483 回答