I changed the code to also include a global variable:
#include <stdio.h>
extern"C" {void my_write(void);}
double rco2;
int main(void)
{
rco2 = 2.0;
printf("hello Cpp world\n");
printf("rco2 = %6.2f \n",rco2);
my_write();
return 0;
}
module mymodule
use, intrinsic :: ISO_C_BINDING
REAL(C_DOUBLE),BIND(C) :: rco2
contains
subroutine my_write() bind(C,name="my_write")
write(*,*) 'hello fortran world'
write(*,*) rco2
end subroutine
end module mymodule
This is what happens with g++, respectively, icc:
> ifort -c mymodule.f90
> g++ -c main.cpp
> ifort main.o mymodule.o
main.o: In function `main':
main.cpp:(.text+0x0): multiple definition of `main'
/opt/local/SRON64/intel/composer_xe_2015.1.133/compiler/lib/intel64/for_main.o:/export/users/nbtester/efi2linux_nightly/branch-15_0/20141024_000000/libdev/frtl/src/libfor/for_main.c:(.text+0x0): first defined here
/opt/local/SRON64/intel/composer_xe_2015.1.133/compiler/lib/intel64/for_main.o: In function `main':
/export/users/nbtester/efi2linux_nightly/branch-15_0/20141024_000000/libdev/frtl/src/libfor/for_main.c:(.text+0x2a): undefined reference to `MAIN__'
> ifort -nofor-main main.o mymodule.o
>
So, with g++ it works with the nofor-main flag. Now for icc:
> ifort -c ifort main.o mymodule.o
> icc -c main.cpp
> ifort main.o mymodule.o
main.o: In function `main':
main.cpp:(.text+0x0): multiple definition of `main'
/opt/local/SRON64/intel/composer_xe_2015.1.133/compiler/lib/intel64/for_main.o:/export/users/nbtester/efi2linux_nightly/branch-15_0/20141024_000000/libdev/frtl/src/libfor/for_main.c:(.text+0x0): first defined here
/opt/local/SRON64/intel/composer_xe_2015.1.133/compiler/lib/intel64/for_main.o: In function `main':
/export/users/nbtester/efi2linux_nightly/branch-15_0/20141024_000000/libdev/frtl/src/libfor/for_main.c:(.text+0x2a): undefined reference to `MAIN__'
main.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
> ifort -nofor-main main.o mymodule.o
main.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
> ifort -nofor-main -lstdc++ main.o mymodule.o
>
In case if icc, it works with the flags nofor-main and lstdc++
Not sure, what this means.