Невозможно скомпилировать boost / comb с nvcc [duplicate]

Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:

Предположим, что у вас есть класс с именем Student.

public class Student
{
    private string FirstName;
    private string LastName;
    public string GetFullName()
    {
        return FirstName + LastName;
    }
}

Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.

public class StudentInfo
{      
    public string GetStudentName()
    {
        Student s;
        string fullname = s.GetFullName();
        return fullname;
    }        
}

Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.

2
задан Vik 15 November 2011 в 17:22
поделиться

1 ответ

nvcc иногда имеет проблемы с компиляцией сложного кода шаблона, такого как найденный в Boost, даже если код используется только в функциях __host__.

Если расширение файла .cpp, nvcc не выполняет никакого анализа и вместо этого пересылает код компилятору хоста, поэтому вы наблюдаете различное поведение в зависимости от расширения файла.

Если возможно, попробуйте выполнить карантинный код, который зависит от Boost в .cpp, которые не нужно анализировать с помощью nvcc.

Я также обязательно попробую nvcc, который поставляется с последним CUDA 4.1 . Поддержка шаблона nvcc улучшается с каждым выпуском.

4
ответ дан Jared Hoberock 27 August 2018 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: