I’m trying to compile some other people’s wrapper program on a large system, in which it’s using a global object from another file, the definition of the class is like:
class __declspec(dllexport) A
{
...
static A * instance;
}
And in my separate source file (which I want to build to a .exe), I included the header file A.h, and declare at the beginning like this
A * A::instance;
to access the data in A.
The problem is, this piece of code can be built successfully on Linux, now when I try to build it in windows NT, it will have issues.
-
If I leave it like this, the compiler will complain with a
C2491 error, definition of dllimport function not allowed. -
If I remove this line of A declaration, I’ll get a lot of error
LNK2001: unresolved external symbol.
Not quite sure what is the problem here, I did some research online, but couldn’t find a good answer, I myself is not that familiar with dll import/export and some C++ tricks either. Can some one provide some insights on the problem or which direction should I spend my time on to figure this out?
Or say, if I already have a static object like this, and I want to write another program to access it, how exactly should I do?
Please also correct me if I made any mistakes here. Thanks!
I think the keyword you need is
extern, as in:This says the variable
A::instanceis defined somewhere else, but you’re telling the compiler about it so you can use it by name in this file.