0

nvccスロー

/usr/include/boost/concept/detail/has_constraints.hpp:29: error: ‘&’ cannot appear in a constant-expression
/usr/include/boost/concept/detail/has_constraints.hpp:29: error: template argument 2 is invalid

has_constraints.hpp にはすでに疑わしいコードが含まれています。

#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
  // Work around the following bogus error in Sun Studio 11, by
  // turning off the has_constraints function entirely:
  //    Error: complex expression not allowed in dependent template
  //    argument expression
  inline no has_constraints_(...);
#else
  template <class Model>
  inline yes has_constraints_(Model*, wrap_constraints<Model,&Model::constraints>* = 0);
  inline no has_constraints_(...);
#endif

質問: これは nvcc ブーストの非互換性ですか、それともコードに問題がある可能性がありますか?

4

3 に答える 3

1

ここにパッチがありますhttp://code.google.com/p/asadchev/source/browse/trunk/projects/boost/boost-1.46.0.nvcc.patch

おそらく、何が変更されたかを確認し、同様にコードを修正することができます

ソースは、gccのようなコンパイラー部分とeggのようなコンパイラー部分の両方から見られることに注意してください。

于 2011-12-20T09:14:48.053 に答える
1

「Model::constraints」の前に「&」があるのはなぜですか? それが問題だと思います。(//明らかにそうではありません)

編集:

http://forums.nvidia.com/index.php?showtopic=182890この問題について話し、いくつかの回避策をハックしてください

http://forums.nvidia.com/index.php?showtopic=150025

EDIT2:

さて、しばらくこれを実行した後、これは私が固執しているものです:

http://forums.nvidia.com/index.php?showtopic=215470「boost と nvcc には既知の互換性の問題があります。回避策は、cuda コードを nvcc と boost コードでコンパイルするようにソースを分割することです。ホストコンパイラで。」グループの Justin Luitjens による: NVIDIA 従業員

試してみて、うまくいかない場合は、個別にコンパイルしてからリンクしてください。

于 2011-12-16T16:06:37.127 に答える
0

最後に行ったことは、Sun Studio 11 の質問で引用されている例のように、has_constraints_ をオフにすることでした。

于 2012-01-13T11:12:17.740 に答える