Ich versuche, mit dem CUDA Toolkit auf meinem Debian GNU/Linux-System zu kompilieren, aber selbst in extrem einfachen Programmen ist C++ 11 Unterstützung anscheinend gebrochen.CUDA nvcc Compiler scheitert bei der Verwendung von C++ 11 (Linux; clang 3.8)
Zum einen ist hier eine Liste der relevanten Software-Versionen:
- Linux-Kernel: 4.13.0
- CUDA Toolkit: 8.0.61
- Clang: 3.8.1
- libc: 2,25
- libstdC++: 7.2.0
eine wirklich grundlegende Testdatei verwenden,wie unten,:
__global__ void testfunc(float *a, float *b, int N)
{
for (int i = 0; i < N; ++i) {
b[i] += a[i];
}
}
Und mit dem Befehl kompilieren:
nvcc -ccbin clang-3.8 -std c++11 -o test test.cu
ich eine lange Liste von declaration conflicts with target of using declaration already in scope
Fehler. Ich werde zwei unten zeigen - es automatisch
/usr/include/math_functions.h:8925:41: error: declaration conflicts with target of using declaration already in scope
__attribute((always_inline)) inline int signbit(float x);
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/cmath:668:16: note: target of using declaration
constexpr bool signbit(float __x)
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/math.h:68:12: note: using declaration
using std::signbit;
^
/usr/include/math_functions.h:8929:41: error: declaration conflicts with target of using declaration already in scope
__attribute((always_inline)) inline int signbit(double x);
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/cmath:672:16: note: target of using declaration
constexpr bool signbit(double __x)
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/math.h:68:12: note: using declaration
using std::signbit;
^
bei 20 abgeschnitten Bin ich Compiler/Bibliothek Versionen nicht kompatibel mit CUDA? Es ist scheinbar schwierig, diese Informationen zu finden, zumal Debian offiziell nicht von Nvidia unterstützt wird. Ich verwende nur Pakete, die von Debian-Repositories verteilt werden (ich bin auf der Test-Distribution).
vielleicht sollten Sie es auf einer unterstützten Distribution versuchen. Da Sie versuchen, clang zu verwenden, sieht das nicht richtig aus: '..lib/gcc/..' Siehe [hier] (https://stackoverflow.com/questions/24342312/clang-seems-to-use -the-gcc-libraries) –
Danke @RobertCrovella, es scheint gut zu funktionieren, wenn ich libC++ installiere und '--compiler-options -stdlib = libC++' benutze, anstatt die gcc-Bibliotheken benutzen zu müssen (die für CUDA 8.0 zu neu sind) zu unterstützen). Ich werde eine Antwort schreiben. – Archimaredes