Description
Currently there is a list of symbols that do not provide version information. You can see these by running: objdump -TC libz.so.1.2.11 | grep Base
.
For me this is problematic because unversioned symbols preempt all versioned ones, so I cannot define a different version for all symbols in my zlib since as soon as another library linked to the zlib provided by the system is loaded, the unversioned symbols will be mismatched (they will be overwritten by the first one found).
I have seen this entry in the ChangeLog for version 1.2.3.1:
Add zlib.map for Linux: "All symbols from zlib-1.1.4 remain
un-versioned, the patch adds versioning only for symbols introduced in
zlib-1.2.0 or later. It also declares as local those symbols which are
not designed to be exported." [Levin]
Is there any reason why these symbols were left unversioned?
One could go through the revision history and add the symbols to the versions when they were added.
Alternatively, the unversioned symbols could be added either to version 1.1.4 or some other (earlier?) version.
You can test that this does not break previous binaries by compiling, renaming the examplesh
, adding a symbol to a version (for example compress
), recompiling and running the renamed examplesh
.
I would gladly provide a pull request for this if you are interested, once a decision is made.