GNU/Linux >> Znalost Linux >  >> Linux

Závažná chyba:cuda.h:Žádný takový soubor nebo adresář

Sám jsem nikdy nezkompiloval projekt cuda, ale myslím, že budete muset propojit knihovnu s kompilátorem.

Nějaké rychlé googlování říká, že Nvidia má na to kompilátor, který zvládne všechno. Takže to stačí nainstalovat a měli byste jít. Říká se tomu NVVC. Po instalaci stačí spustit:

nvcc helloworld.cu -o hello.out

S externími knihovnami, jako jsou tyto, je téměř vždy potřebujete propojit. Nemusíte to dělat pro standardní knihovnu, protože linker již ví, kde ji najít.


Správný soubor hlavičky zahrnutí pro toto není cuda.h ale cuda_runtime.h , za předpokladu, že chcete použít gcc jako kompilátor tohoto kódu. Jak ukazuje druhá odpověď, můžete použít pouze nvcc (který je již nainstalován na vašem počítači), který by pro tento kód vůbec nevyžadoval žádné hlavičky include.

Pokud chcete použít nvcc pravděpodobně byste se měli ujistit, že odpovídající PATH je nastavena proměnná prostředí. Tyto a další užitečné informace jsou obsaženy v instalační příručce pro linux.

Pokud tedy kód upravíte takto:

#include <cuda_runtime.h>

int main ()
{
    int deviceCount;
    cudaError_t e = cudaGetDeviceCount(&deviceCount);
    return e == cudaSuccess ? deviceCount : -1;
}

Měli byste být schopni jej úspěšně zkompilovat pomocí příkazu podobného tomuto:

gcc -I/usr/local/cuda/include -L/usr/local/cuda/lib64 has_cuda.c -lcudart -o has_cuda

Cesta za -I přepínač by měl obsahovat cestu k cuda_runtime.h na vašem stroji. Normálně by to bylo nastaveno jako výše, ale nejsem si jistý, zda cuda na vašem počítači je nastaven symbolický odkaz a také to vypadá, že váš adresář pro začlenění může být na neobvyklém místě, tj.

/usr/local/cuda-8.0/targets/x86_64-linux/include

ale můžete použít find stejně jako vy, abyste ji našli.

Podobně cesta za -L přepínač musí být cesta k vašemu cuda lib64 adresář, který bude obsahovat libcudart.so a a jeho příbuzné. Opět by to normálně bylo symbolicky propojeno na cestu, kterou jsem ukázal, ale instalace vašeho počítače nemusí odpovídat mým očekáváním. Měli byste být schopni používat find k nalezení správné cesty.

A jak je uvedeno v druhé odpovědi, pokud použijete nvcc (které jste již našli), nebudete muset explicitně vybrat -I a -L cesta. Nejjednodušší způsob, jak to udělat, je přejmenovat soubor z has_cuda.c na has_cuda.cu , pak byste měli být schopni zkompilovat takto:

nvcc has_cuda.cu -o has_cuda

A konečně, Ubuntu 16.10 není v tuto chvíli oficiálně podporovaná distribuce pro CUDA, takže se mohou objevit některé neočekávané věci ohledně způsobu instalace na váš počítač. Doporučil bych vám, abyste si přečetli dříve propojenou instalační příručku, protože obsahuje užitečné informace o krocích nastavení po instalaci, jako je nastavení proměnných prostředí, a také o tom, jak "ověřit" instalaci CUDA.

Kdykoli spouštíte kódy CUDA a máte jakýkoli problém, ujistěte se, že používáte správnou kontrolu chyb cuda a spusťte své kódy pomocí cuda-memcheck, například takto:

cuda-memcheck ./has_cuda

I když nerozumíte hlášeným informacím o chybě, mohou být užitečné pro ty, kteří se vám snaží pomoci.


Linux
  1. Chyba:xenstore-read:xs_open:Žádný takový soubor nebo adresář na DomU [Vyřešeno]

  2. Chyba:Xend Start – /proc/xen/capabilities:Žádný takový soubor nebo adresář [Vyřešeno]

  3. Oprava závažné chyby openssl err.h – Žádný takový soubor nebo adresář [OpenCA]

  1. Chyba:Tcl.h nebyl nalezen (žádný takový soubor nebo adresář)?

  2. Žádná taková chyba souboru nebo adresáře při spouštění binárního souboru

  3. Chyba kompilace:g++:chyba při pokusu o spuštění 'cc1plus':execvp:Žádný takový soubor nebo adresář

  1. arm-linux-gnu-gcc fatální chyba:stdio.h:Žádný takový soubor nebo adresář

  2. Bash:Žádný takový soubor nebo adresář?

  3. sys/types.h:Žádný takový soubor nebo adresář