Cuda C - Linkerfehler - undefinierte Referenz

8

Ich habe es schwer, ein einfaches cuda-Programm zu erstellen, das nur aus zwei Dateien besteht.

Das main.c sieht so aus:

%Vor%

Das cuda.h sieht so aus:

%Vor%

Und die Datei my_cuda.cu klingt wie folgt:

%Vor%

Wenn ich jedoch kompiliere, erhalte ich immer den folgenden Fehler:

%Vor%

Danke für Ihre Hilfe.

    
user1829358 25.11.2012, 16:33
quelle

2 Antworten

17

Sie haben ein Problem mit dem Symbolnamen Mangling. nvcc verwendet den Host-C ++ - Compiler, um Host-Code zu kompilieren, und dies bedeutet, dass das Symbol Name Mangling auf den Code angewendet wird, der von ausgegeben wird die CUDA Toolchain.

Es gibt zwei Lösungen für dieses Problem. Die erste besteht darin, dummy_gpu mit der C-Verknüpfung zu definieren, also ändern Sie Ihre my_cuda.cu in etwa so:

%Vor%

Beachten Sie, dass Sie Ihren Verknüpfungsbefehl folgendermaßen ändern müssen:

%Vor%

, da die CUDA-Shared Libraries nach den Objektdateien angegeben werden müssen, die sie verwenden.

Ihre zweite Alternative wäre, entweder g++ oder nvcc zu verwenden, um die Verknüpfung zu machen, in welchem ​​Fall das ganze Problem verschwinden sollte.

    
talonmies 25.11.2012, 16:42
quelle
5

Sie haben ein C / C ++ - Verknüpfungsproblem. nvcc verziert Dinge in einer C ++ - Mode, aber Ihr GCC-Compiler behandelt Dinge mit C-Stil Verknüpfung. Eine einfache Möglichkeit, das Problem zu beheben, besteht darin, Ihre main.c in main.cpp umzubenennen und dann Ihre Befehle mit g ++ anstelle von gcc

zu wiederholen     
Robert Crovella 25.11.2012 16:44
quelle

Tags und Links