I am using a makefile system with the pvcs compiler (using Microsoft Visual C++, 2008 compiler) and I am getting several link errors of the form:
error LNK2019: unresolved external symbol __imp__RegisterFilter@8 referenced in function _main
This is happening DESPITE using the extern "C" declaration, viz.:
extern "C" int CLRDUMP_API RegisterFilter( LPCWSTR pDumpFileName, unsigned long DumpType );
Also, in the makeexe.mak, the library is being linked in as:
$(COMPILEBASE)\lib\clrdump.lib \
To be honest, I am not an expert at makefiles, and I am changing over a system from Microsoft Visual C++ 6.0 to 2008. This change-over may have something to do with the link errors, as the system used to work before.
Any help would really be appreciated.
Thanks in Advance,
Sincerely, Joseph
-- Edit 1 --
Does anyone know how to turn verbose on in the makefile system of pvcs?
Note that the above function is already a compiler-decorated version, having
__imp__RegisterFilter@8
whereas the C++ function is just
RegisterFilter
Thanks for the help, but if anyone can post a more complete solution, that would also be very appreciated.
Sincerely, Joseph
-- Edit 2 --
Some kind person posted this, but when I signed in it disappeared:
The imp prefix indicates that this function is imported from a DLL. Check the definition of CLRDUMP_API - is it __declspec(dllimport)? See this article for more information.
There was a working link, but I've lost that, however I suppose one can always search the topic.
Thanks, whoever you were!
-- Edit 3 --
Thanks ChrisN (I'm not yet allowed to vote). Despite using the refresh button, your answer disappeared, but then re-appeared after I posted a cut-n-paste.
This is my definition of that:
define CLRDUMP_API __declspec(dllimport) __stdcall
I assume that the __stdcall is OK?
-- Edit 4 --
While I appreciate the efforts of those who answered, particularly ChrisN, at least on my particular system, the link error remains. So if anyone has any further insight, I'd appreciate it. Thanks again.
I was creating a simple Win32 c++ application in VS2005 and I was getting this error:
This application was using property sheets, hence it required this header (prsht.h).
The solution to my problem was as follows: in program Properties→Configuration Properties→Linker→General, I set Additional Library Directories to
"C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib".Also in program Properties→Configuration Properties→Linker→Command line for the Additional Options, I added
ComCtl32.Lib ComDlg32.Lib.My program is now compiling without any problems. My two cents: you need to identify all the libraries that your program requires. Hint: check all the headers you have included, you need to make sure that your linker can see them.