Such symbols are typically defined when creating libraries.
When compiling the library, the symbol will have a value needed to make the object exportable (visible to outside modules). For example, on Windows, a DLL has a table of functions that external programs can use. The DLL probably has a host of other functions only it uses. By having the compiler/platform-specific symbol there it gets listed in the DLL's export table.
When using the library, the symbol only needs the usual import status; declaring it with the export status would confuse the compiler because you don't define the functions -- you only want to use them.
Hence, the easy way is to #define a name such as VTK_TK_EXPORT that you can manipulate during the compilation process to build or link things the proper way.
If that makes no sense (yet), don't fret it. You only need to care if you are creating your own library.
Thanks, It makes some sense to me. Does it mean when compile the class with the symbol, it will generate a value and will be listed in the dll export table? In this case, does it mean a static library will never have such a thing? Also, without the symbol, it still can be compiled into a dll, cannot it? Then what's the benefit of using this symbol please?
I explained the benefit - it is necessary to make the function available to users of the DLL. Beyond that, it doesn't matter.
To learn more you'll have to study on your own, as I don't have interest in explaining all the gory technical details for one particular system here and now. (Sorry.) Google around "msdn dll" for more.