Несовместимое искажение имен C++ и CUDAC++

Программы на C++. Форум разработчиков
Anonymous
Несовместимое искажение имен C++ и CUDA

Сообщение Anonymous »

Я попытался скомпилировать PyTorch из исходного кода, но столкнулся с очень странной ошибкой компоновки. Проведя расследование, я обнаружил, что шаблонная функция, определенная в файле C++, и ее объявление в файле CUDA генерируют два разных искаженных имени.
  • Определение C++ : _ZNK2at10TensorBase14const_data_ptrIdTnNSt9enable_ifIXntsr3stdE10is_const_vIT_EEiE4typeELi0EEEPKS3_v
  • Объявление CUDA: _ZNK2at10TensorBase14const_data_ptrIdTnNSt9enable_ifIXntsr4__T0E10is_const_vIT_EEiE4typeELi0EEEPKS3_v
Эти два имени выглядят почти одинаково, за исключением выделенных жирным шрифтом частей.Когда я использую llvm-cxxfilt, два искаженных имени вернули одно и то же имя функции double const* at::TensorBase::const_data_ptr() const
Версия инструментов:
  • clang: Ubuntu clang версии 18.1.8
  • NVCC: Инструменты компиляции Cuda, выпуск 12.6, V12.6.85
  • Хост-компилятор NVCC: clang 18.1.8, как указано выше
Не могли бы вы объяснить мне:
  • Какие части в искаженных именах выделены жирным шрифтом? Я не вижу их в расчлененном имени.
  • Почему два разных искажённых символа могут привести к одному и тому же расчленённому имени?


Подробнее здесь: https://stackoverflow.com/questions/792 ... consistent

Вернуться в «C++»