Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added compiler option -fPIC. Required for clang+static linking with libexiv2 #2970

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

bertwim
Copy link
Contributor

@bertwim bertwim commented May 16, 2024

When using clang++ (18.0.0, 19.0.0) I cannot not link my application against the static exiv2 library libexiv2.a. The linker complaines about missing a -fPIC (or -fPIE) flag.
Adding this flag solves the issue.

This linking error does not occur when g++ is used. It also does not occur when the .so library is used. Not for g++ and not for clang++. However, still adding the -fPIC flag doesn't hurt in those cases.

So strictly speaking, the fix is required for at least clang++ and static exiv2. The fix provided does not take this into account, and simply applies the flag regardless.

@@ -67,6 +67,7 @@ option(EXIV2_TEAM_OSS_FUZZ "Build config for OSS-Fuzz" OFF)

option(EXIV2_TEAM_PACKAGING "Additional stuff for generating packages" OFF)
set(EXTRA_COMPILE_FLAGS " ")
add_compile_options( "-fPIC" )
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CMAKE_POSITION_INDEPENDENT_CODE

@neheb
Copy link
Collaborator

neheb commented May 20, 2024

This is holdout behavior from Autotools where by default, shared libraries are compiled as PIC but static ones are not. CMake mimics that. meson is PIC everywhere by default for speed reasons.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants