and in c file i have
C++ allows multiple functions (methods) to have the same name, if they have different argument types. The way that this is supported is through name mangling, where the real function name is based on the argument types.
C does not.
So, the C++ compiler performs name mangling. The C compiler does not. The linker is looking for the name mangled function, which it can't find, because the C compiler didn't mangle the name.
The easiest solution is to use .cpp as the file extension, so it is the C++ compiler that gets invoked, not the C compiler.
If you don't like that idea, hit google for help calling C functions from C++.