OK, ho una domanda CUDA 5.0 davvero preoccupante su come collegare correttamente le cose. Sarei davvero grato per qualsiasi aiuto!Come collegare il codice host con una libreria CUDA statica dopo la compilazione separabile?
Utilizzando le funzionalità di compilazione separabili di CUDA 5.0, ho generato una libreria statica (* .a). Questo si collega bene con altri file * .cu quando si esegue nvcc, l'ho fatto molte volte.
Vorrei ora prendere un file * .cpp e collegarlo al codice host in questa libreria statica utilizzando g ++ o qualsiasi altra cosa, ma non nvcc. Se tento questo, ricevo errori del compilatore come
undefined reference to __cudaRegisterLinkedBinary
sto utilizzando sia -lcuda
e -lcudart
e, per quanto ne so, sono le librerie nell'ordine corretto (che significa -lmylib -lcuda -lcudart
). Non penso che sia un problema con quello. Forse ho sbagliato, ma sento che mi manca un passaggio e che ho bisogno di fare qualcos'altro nella mia libreria statica (collegamento del dispositivo?) Prima di poterlo usare con g ++.
Ho perso qualcosa di cruciale? È possibile?
Domanda bonus: voglio che il risultato finale sia una libreria dinamica. Come posso raggiungere questo obiettivo?
add '-lcudadevrt' –
Ho già provato che, didn non fare nulla Il comando che sto usando è: g ++ -pthread -shared -Wl, -O1 -Wl, -Bsymbolic-functions -Wl, -Bsymbolic-functions -Wl, -z, relro mycpplib.o mycudalib.a -L/usr/local/cuda-5.0/lib64 -L/usr/local/cuda-5.0/lib -lmystaticlib -lcuda -lcudart -lcudadevrt -o mylinkedlib.so - Sto provando a creare un modulo Python per la mia libreria CUDA. – user2333829
L'errore relativo a __cudaRegisterLinkedBinary di essere indefinito si verifica effettivamente quando provo a importare il modulo Python. g ++ in realtà compila tutto senza lamentarsi. – user2333829