Preserve hidden symbol visibility for static builds with GCC-compatible compilers - #1088
Open
realwangzhichao wants to merge 1 commit into
Open
Preserve hidden symbol visibility for static builds with GCC-compatible compilers#1088realwangzhichao wants to merge 1 commit into
realwangzhichao wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
In the
__GNUC__ >= 4branch,TINYXML2_LIBis unconditionally defined as__attribute__((visibility("default"))).This overrides the hidden-by-default visibility configured by CMake, even when
tinyxml2 is built as a static library. When the static archive is linked as a
private dependency into a shared library, tinyxml2 symbols can consequently
appear in that shared library's dynamic symbol table.
This may cause symbol interposition when multiple versions of tinyxml2 are
loaded into the same process.
Change
Mirror the existing MSVC export/import logic in the
__GNUC__branch:visibility("default")whenTINYXML2_EXPORTis defined.visibility("default")whenTINYXML2_IMPORTis defined.TINYXML2_LIBundecorated so static builds preserve theconfigured hidden visibility.
Shared-library exports and imports remain unchanged.
Testing
Tested with GCC 13.3:
ctest: passed.ctest: passed.--whole-archiveand verified with
nm -Dthat notinyxml2::symbols were exported.nm -Dthat the shared tinyxml2 library still exports itspublic symbols.