You have to read something about calling conventions and code decorations
It's standard to prepend an underscore to C symbols representing variables, functions, etc.
If the calling convention is __stdcall symbol will be also postpended by an '@' followed by the number of bytes occupied by function parameters on the stack. You don't need to care about this because the compiler will take care of all.
Now open your static project lib and look in option->compiler you will see that by default the calling convention is set on __stdcall, if you check your console project you will find default calling convention set to __cdecl.
When you include the definition file containing i.e.
int MyFunc(int a);
Because the default for console project is __cdecl also your prototyped libraries will be considered as __cdecl, and the linker will search for a symbol
'_MyFunc' in your library and will not find it.
That's why your library have __stdcall as default and creates the symbol
'_MyFunc@4' (for 32 bits project).
The correct way to solve the issue is to always specify the convention in the function prototype:
int __stdcall MyFunc(int a);
Or, less nice and less correct, change the default calling convention to all your library.
To link a stic library simply add prototypes of functions you want to use in your source, then in project options open linker tab and add the library name in the libraries list. Maybe you want use folders tab to set the folder where is stored your library.
P.S.
Forcing the use of the wrong calling conventions, apart from special case of function with no parameters, will lead to a program crash. I.e. if you compile a function in __stdcall then declare it in prototype to be a __cdecl or the reverse.