![]() ![]() ![]() Although there are rare cases where executables are required to export symbols, for instance because they are used by some of the libraries they link to as a “callback” from the library to the program, or for C++ programs for RTTI to properly work, most of the times the symbols are exported just because of libtool.īy default when you link a program, it doesn’t get its symbols exported, they are hidden and thus resolved directly at buildtime, for those symbols present in the source files themselves. For now let’s just say that the exported symbols require some extra step to be taken during the execution of a program, and that the process takes time.Įxecutables don’t usually need to export symbols, and they usually don’t export symbols at all. I’ll return on the way the runtime linker works at a different moment. And exactly as shared libraries, they can export symbols.Įxported symbols are resolved by the dynamic – runtime – linker, through the process of dynamic bindings, and thy might collide. I’ve blogged before about the problems related to exporting symbols from final executables, but I haven’t really dug deep enough to actually provide useful information to developers and users about what those exported symbols represent, for an executable.įirst of all, let’s start to say that an executable under Linux, and on most modern Unixes, is just the same kind of file of a shared object (shared library, if you prefer, those which are called DLL under Windows, if you come from a Windows background). I think this post might be interesting for those people interested in trying to get all the performance power out of a box, without breaking anything in the process. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |