1

hc.cu のコード:

//patch for g++4.7
#ifdef _GLIBCXX_ATOMIC_BUILTINS
#undef _GLIBCXX_ATOMIC_BUILTINS
#endif
#ifdef _GLIBCXX_USE_INT128
#undef _GLIBCXX_USE_INT128
#endif

struct pi_
{
    double operator()() const
    {
        return 3.141592653589793;
    }
};

#include <iostream>

int main()
{
    std::cout << pi_()();

    return 0;
}

コンパイルすると、2 つの (1 つではなく) エラーが発生します。

$nvcc -c hc.cu
hc.cu: In function ‘int main()’:
hc.cu:21:22: error: ‘type name’ declared as function returning a function
hc.cu:21:22: error: ‘type name’ declared as function returning a function

誰かが私に問題を教えてもらえますか? 私は g++ 4.7 を使用している archlinux ユーザーです。nvcc を機能させるには、2 つのマクロを定義解除する必要があります。これらの 2 つの undef は、コンパイル エラーで何らかの役割を果たしますか?

cudaに関するいくつかの情報:

$ pacman -Qi cuda
Name           : cuda
Version        : 5.0.35-3
URL            : http://www.nvidia.com/object/cuda_home.html
Licenses       : custom
Groups         : None
Provides       : cuda-toolkit  cuda-sdk
Depends On     : gcc-libs  opencl-nvidia
Optional Deps  : gdb: for cuda-gdb
Required By    : cuda-z  cula  cusp
Conflicts With : None
Replaces       : cuda-toolkit  cuda-sdk
Installed Size : 1464880.00 KiB
Packager       : Sven-Hendrik Haase <sh@lutzhaase.com>
Architecture   : x86_64
Build Date     : Tue 30 Oct 2012 12:51:49 PM CET
Install Date   : Wed 09 Jan 2013 02:38:26 PM CET
Install Reason : Explicitly installed
Install Script : Yes
Description    : NVIDIA's GPU programming toolkit

および g++

pacman -Qi gcc-multilib
Name           : gcc-multilib
Version        : 4.7.2-3
URL            : http://gcc.gnu.org
Licenses       : GPL  LGPL  FDL  custom
Groups         : multilib-devel
Provides       : gcc=4.7.2-3
Depends On     : gcc-libs-multilib=4.7.2-3  binutils-multilib>=2.23      libmpc      cloog  ppl
Optional Deps  : None
Required By    : boost-build  chicken  clang  dkms  gcc-fortran-multilib     gcc-objc-multilib  ghc  htmldoc  libreoffice-sdk  libtool  virtualbox-host-dkms
Conflicts With : gcc
Replaces       : None
Installed Size : 81560.00 KiB
Packager       : Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
Architecture   : x86_64
Build Date     : Wed 26 Dec 2012 01:22:52 PM CET
Install Date   : Mon 31 Dec 2012 03:40:26 PM CET
Install Reason : Installed as a dependency for another package
Install Script : Yes
Description    : The GNU Compiler Collection - C and C++ frontends for multilib
4

1 に答える 1

3

CUDA 5.0 の nvcc でエラーを繰り返すことができます。

nvccのバグのようです。

pi_()()g++ では動作しますが、nvcc では動作しません。

nvcc で動作させるには、次のように記述する必要があります。

pi_ p;
std::cout<<p()<<std::endl;

(pi_())()nvcc で使用すると、このエラーが発生します。nvcc が誤って pi_ を型キャストとして扱っているようです。

a.cu(14): エラー: 型 "pi_ ()" へのキャストは許可されていません

a.cu(14): エラー: 式が必要です

「/tmp/tmpxft_00003006_00000000-6_a.cpp1.ii」のコンパイルで 2 つのエラーが検出されました。

于 2013-01-16T14:42:59.840 に答える