Pregunta

Estoy intentando compilar un proyecto mediante la compilación de archivos de objetos y luego los une, nada especial:

hello.o : hello.h hello.cu
    nvcc hello.cu -c -o hello.o
#...
main.o : $(objs)
    nvcc *.o -o exec

Cuando llegue a la fase de enlace, casi se muestra todos los métodos que falta y no declarado, a pesar de que muestra nm que cada uno es, de hecho, sentado dentro de mis archivos de objetos, y sus nombres son unmangled. ¿Que esta pasando aqui?

¿Fue útil?

Solución 2

Ok, así que la formulación de mi pregunta era incorrecta. De hecho, el problema era que yo estaba compilar código C de esta manera:

hello.o : hello.h hello.cu
    nvcc hello.c -c -o hello.o
#...
main.o : $(objs)
    nvcc *.o -o exec

que causó NVCC para pasar los archivos .c a gcc. Cuando grepped 'nm * .o' por el nombre de mi método, me encontré con que los ficheros objeto emitidos por gcc tenían nombres unmangled, mientras que los archivos .cu, que fueron compilados por g ++, espera que los nombres alterados.

Mi solución fue cambiar el nombre de todos los archivos .c en mi proyecto para .cu, aunque creo (pero no lo he probado) que dejarlos como .c y llamando g ++ en forma explícita en el archivo MAKE debería ser suficiente.

Otros consejos

Sus objetivo finales make miradas falsa: ¿No debería decir:

exec : $(objs)
    nvcc $(objs) -o $@

También puede ser necesario añadir las bibliotecas CUDA a la línea de comandos (creo nvcc cifras esto cuando se está compilando un archivo .cu directamente, pero tal vez no si sólo le dan .o archivos). Por lo tanto, algo más parecido a esto:

exec : $(objs)
    nvcc $(objs) -o $@ -lcuda -lcudart -lcublas

(Precisamente el que las bibliotecas que necesita depende de su código)

Me trató de llamar g ++, pero todavía tiene los mismos errores. Se encontró que la respuesta aquí:

http://forums.nvidia.com/index. php? showtopic = 190973 y st = 0 & gopid = 1179661 & # entry1179661

En resumen, los prototipos de funciones tienen que ser correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top