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.
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:
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.
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 wiederholenTags und Links c cuda linker-errors