Hi everybody, I am new into CUDA and nvcc, so hopefully my doubt will be trivial!
I have to call a fortran function from a .cu file, so I set up a very simple example. Here are the two files:
helloworld.cu
#include <stdio.h>
#include
#include <cuda.h>
#include <cuda_runtime.h>
void extern hello_(void);
global void kernel(void){
printf(“hello world CU\n”);
}
int main (void){
kernel<<<1,1>>>();
printf(“hello world C \n”);
cudaDeviceSynchronize();
hello_();
return 0;
}
hello.f90
subroutine hello()
implicit none
write(*,*) "Hello from Fortran routine..."
end subroutine hello
finally, I compile the two as follow:
nvcc -c helloworld.cu;
gfortran -ffree-form -c hello.f90;
nvcc -o hiFromAll helloworld.o hello.o -lgfortran ;
getting the following output:
helloworld.o: In function main': tmpxft_00000604_00000000-4_helloworld.cudafe1.cpp:(.text+0x90): undefined reference to
hello_()’
collect2: error: ld returned 1 exit status
Does somebody have any idea where the error in the linking procedure is?
I have also made some tests with the correspondent .c .f90 version (excluding the cuda calls and the nvcc compilation) and it works…
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Tue_Aug_11_14:27:32_CDT_2015
Cuda compilation tools, release 7.5, V7.5.17
GNU Fortran (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4