Question

I have a static library exporting the function

time_t SomeClass::getTime();

After compilation its name is mangled as

?getTime@SomeClass@@QAE_JXZ

When I try to use it, VS returns an error

error LNK2001: unresolved external symbol "public: long __thiscall SomeClass::getTime(void)" (?getTime@SomeClass@@QAEJXZ)

And I don't know what is wrong. Why the same function is mangled differently? I've compiled both projects with the same Visual Studio, class has a single header.

Please, help.

Was it helpful?

Solution

The problem was in difference in time_t declarations. Library means it is 64-bit, but application waits for 32-bit value.

The remaining question is "why there is no good documentation for MSVS name mangling"? I've read a lot, but didn't find what is the underline in parameters list.

OTHER TIPS

Have you included the .lib file in your linker INPUT property? In the case you have both two projects in the same solution, you can add the library as a reference to the main project: right click in the main project, and References.

Cheers,

Try to rebuild the whole project. If this does not work, check your Visual Studio Directories (header, libs)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top