views:

77

answers:

3

So I am trying to compile legacy app from 32 bit to 64 bit.. I re-compiled all of the libs it used and made it look into WIN SDK6.0A x64 bit for libs..

I am using:

  • Visual Studio Professional Edition 2008
  • Visual C++
  • dotNet Framework 3.5 SP1
  • Windows Server 2008R2
  • Windows SDK is 6.0A

Everythings finally coming up but I am getting these weird undefined symbol errors:

error LNK2019: unresolved external symbol InterlockedDecrement referenced in function ...
error LNK2019: unresolved external symbol InterlockedIncrement referenced in function ...
error LNK2019: unresolved external symbol GetModuleBaseName referenced in ...
error LNK2019: unresolved external symbol EnumProcessModules referenced in ...
error LNK2019: unresolved external symbol EnumProcesses referenced in ...
error LNK2019: unresolved external symbol GetProcessMemoryInfo referenced 

The problem is these are all win stuff from SDK. InterlockedDec and InterlockedInc are coming from kernel32.lib GetModuleBaseName, EnumProcessModules, EnumProcesses,GetProcessMemoryInfo are in psapi.h but also kernel32.lib or psapi.lib

I checked C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64 and both libs kernel32.lib and psapi.lib are there.

It definitely looks up the libs at right spot. I turned on /VERBOSE:LIB and it points to the correct folder.

So I am really confused why isnt it finding them.

Any ideas???

Thanks

A: 

This is very long shot (and I don't really believe this is it) but maybe the headers are not properly guarded with extern "C" for c++ compilation? Are you including system headers or just declaring the functions yourself?

Tomek
nope :( they are all having extern and everything....
grobartn
Have you tried full rebuild? I noticed VC++ gets "confused" from time to time (it probably messes program database) and full rebuild usually helped. I would delete all *.obj, *.exe and *.pdb beforehand, just in case...
Tomek
did that too many times nothing....
grobartn
A: 

Can you post your compile and link command lines, and any #def's in your code?

Does this happen if you make a simple project from scratch that only calls one of those methods?

holtavolt
A: 

So I finally figured it out, kinda... It wasnt finding psapi.lib

In Project->Linker->Additional dependencies instead of just saying psapi.lib I gave full path to it and it worked... not really sure why it failed to find it before but oh well...

grobartn
@grobartn: If you're using msvc you can use `#pragma comment(lib, "psapi.lib")` to add that from source code.
Billy ONeal
wait what will this [ #pragma comment(lib, "psapi.lib") ] do???
grobartn