make: avoid strlcpy/strlcat redefinition on glibc 2.38+#136
Open
holishing wants to merge 1 commit intoptt:masterfrom
Open
make: avoid strlcpy/strlcat redefinition on glibc 2.38+#136holishing wants to merge 1 commit intoptt:masterfrom
holishing wants to merge 1 commit intoptt:masterfrom
Conversation
Contributor
|
7580913 failed because |
Newer glibc (≥ 2.38) provides built-in implementations of strlcpy() and strlcat(). Projects that also define these functions will now fail to build due to symbol redefinition conflicts. This patch is trying to verify whether strlcpy()/strlcat() are available at compile time and only compiles the compatibility implementation when missing. (e.g. glibc is older 2.38) This commit also revert 7580913. Because __has_builtin() only checks for functions built in the compiler(*), as listed in [2]. It never checks again glibc or other libraries. In GCC, only some standard C functions have compiler built-in version. Nonstandard C library functions (here strlcpy() and strlcat()) do not have compiler built-in version. [1]: https://sourceware.org/git/?p=glibc.git;a=commit;h=454a20c8756c9c1d55419153255fc7692b3d2199 [2]: https://gcc.gnu.org/onlinedocs/gcc/Built-in-Functions.html * Thanks to "Wei-Cheng Yeh (IID)" <iid@ccns.ncku.edu.tw> for helping confirm the root cause.
6b1d8bf to
015f3a8
Compare
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.
Newer glibc (≥ 2.38) provides built-in implementations of strlcpy() and strlcat(). Projects that also define these functions will now fail to build due to symbol redefinition conflicts.
This patch is trying to verify whether strlcpy()/strlcat() are available at compile time and only compiles the compatibility implementation when missing. (e.g. glibc is older 2.38)
ref: https://sourceware.org/git/?p=glibc.git;a=commit;h=454a20c8756c9c1d55419153255fc7692b3d2199
related previous discussion: #135
related build test: https://github.com/bbsdocker/imageptt/actions/runs/19000701482