Хорошо, значит, формулировка моего вопроса была неверной.На самом деле, проблема была в том, что я компилировал код на Си так:
hello.o : hello.h hello.cu
nvcc hello.c -c -o hello.o
#...
main.o : $(objs)
nvcc *.o -o exec
, что заставило nvcc передать файлы .c в gcc.Когда я набрал «nm * .o» в качестве имени моего метода, я обнаружил, что объектные файлы, испускаемые gcc, имеют неправильные имена, а файлы .cu, скомпилированные g ++, ожидают искаженные имена.
Мое решение состояло в том, чтобы переименовать все файлы .c в моем проекте в .cu, хотя я думаю (но не проверял), что оставить их как .c и явно вызвать g ++ для них в make-файле должно бытьдовольно.