Re: Unresolved references when compling with root 2.22.04 on WinNT

Valeri Fine (fine@bnl.gov)
Mon, 7 Jun 1999 20:32:20 -0400


> Hi rooters,
> I am compling a dictionary with the recent development version
> 2.22.04 of root on WinNT and the linker complains about
> unresolved references(TBuffer::WriteVersion and TBuffer::ReadVersion).
> The very same code compiles fine with
> the previous release (2.21.08)! I can't figure out what the problem is.
> (I made sure that only the correct version of all .dll's and .lib's are on
> the compilers
> search path and the /test examples complied and linked without problems...
> I also checked if there are any changes in the makefile of the \test
> examples but couldn't find any different
> complier/linker settings compared to the predecessor version.).
>
> The error message displayed by VC5 is:
>
> TDbaTsDict.obj : error LNK2001: unresolved external symbol

"public: void __thiscall TBuffer::WriteVersion(class TClass const *)"

> (?WriteVersion@TBuffer@@QAEXPBVTClass@@@Z)
> TDbaTsDict.obj : error LNK2001: unresolved external symbol

"public: short __thiscall TBuffer::ReadVersion(void)"

(?ReadVersion@TBuffer@@QAEFXZ)
> libDbaTs.dll : fatal error LNK1120: 2 unresolved externals
>
> Any hint on what went wrong is greatly appreciated.....
>

This means your code does call (look for) methods

Version_t ReadVersion();
void WriteVersion(const TClass *cl);

Very this way these methods were defined with the previous version of
ROOT.

The new version has ANOTHER definition for those methods, namely:

Version_t ReadVersion(UInt_t *start = 0, UInt_t *bcnt = 0);
UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt = kFALSE);

Apparently the OBJECT module of your class still contains an obsolete
staff.
The ONLY explanation that module WAS compiled with the OLD header files
supplied.
I paid attention you was talking about "lib" DLL's etc. but didn't mention
ROOT
header files.

Please, check your env once again.

Hope this helps,
Valery