Приведенный ниже код С++ дает мне ошибку при использовании необъявленного идентификатора "temp"
/home/test/include/memory.h
#ifndef MEMORY_H
#define MEMORY_H
#if __ENABLE_MEMORY
__device__ int temp = 50;
extern "C" inline __device__ void* memory(){
...
temp = temp + 100;
...
}
#endif
#endif
/home/test/include/internal_memory.h
#ifndef INTERNAL_MEMORY_H
#define INTERNAL_MEMORY_H
#ifndef __ENABLE_MEMORY
#define __ENABLE_MEMORY 1
#endif
#if __ENABLE_MEMORY
extern "C" __device__ void* memory();
static inline __device__ void* call_memory(){ return memory();}
#endif
#include <memory.h>
#endif
/home/test/main.cpp
#include "internal_memory.h"
..
.
.
void show(){
std::cout << "temp is: " << temp << std::endl;
}
.
.
.
Я компилирую код с помощью clang++ версии 11.0.0.
clang --version выглядит следующим образом:
clang version 11.0.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/rocm/llvm/bin
Я компилирую код, как показано ниже.
/opt/rocm/llvm/bin/clang++ -DDEBUG -D__x86_64__ -I/home/test/include -I/home/test -g -fPIC -std=c++14 -o main.o -c main.cpp
что мне здесь не хватает.
__device__
из функции хостаshow
. Компилятор имеет право жаловаться на это. Во всех смыслах и целях подумайте, что части__device__
и части, не являющиеся__device__
, находятся на разных машинах. 13.06.2020temp
не объявлено вinternal_memory.h
. Вы включаете стандартное C includememory.h
, когда вы намерены, вероятно,#include "memory.h"
. Между<memory.h>
и"memory.h"
есть небольшая, но очень важная разница в путях поиска. 13.06.2020