4 ms·
Not disagreeing with your overall point, but symbol collision is still very much an issue with dynamic linking on Linux right? AFAIK, the gnu dynamic linker do
by athrun 3y ago
Not disagreeing with your overall point, but symbol collision is still very much an issue with dynamic linking on Linux right?
AFAIK, the gnu dynamic linker doesn't do any namespacing (as opposed to Solaris').
- cryptonector 3y agoLinux has versioned symbols, and Solaris/Illumos has direct binding. The two schemes achieve roughly the same result: that the bindings made at link-edit time are the bindings you get a run-time. In the versioned symbols case this is done via decorating symbols in the dependent with the SONAME and version of the dependency that is expected to provide them. In direct binding this is done by decorating symbols in the dependent with just the SONAME of the dependency that is expected to provide them. The versioned symbol technique allows a shared object to provide multiple versions of a symbol with the same name, which can be useful for some things, but direct binding is just much easier to use than versioned symbols: just add `-B direct` to the link-edits and you're done. Even in the absence of symbol versioning and direct binding, the fact that each object records its dependencies means that symbol conflicts will be only among those dependencies, and this can be discovered at link-edit time. LD_PRELOAD interposers, on the other hand, can cause symbol conflicts in spite of all the foregoing. For this you can use `-B protected` or similar, but you may not want to.