Support for position-independent code generation (linking static boost libraries into shared libraries with -fPIC)
- Dominant language
- C++
- Stars
- 251
- Forks
- 63
- PR merge metrics
- No merged PRs in 30d
Description
From a discussion in Boost.Serialization and on the mailing list, it was understood that the gcc compiler jam enables `-fPIC` if linking shared. Another use case is linking static, but then incorporating that into a shared library. On some platform/compiler combinations this requires special treatment, for example with linux and gcc or clang, `-fPIC` is required to enable this to work.
From the mailing list I received advice on testing for -fPIC support in the compiler and then enabling it on a given project. @pdimov suggested that to do it properly would require some work in Boost.Build, but I think it's worth the effort.
> Steven Watanabe wrote:
> ...
>
> > import flags ;
> > project
> > : requirements
> > [ check-has-flag -fPIC : -fPIC ]
> > ;
> >
> > Note 1: The documentation for this is only in
> > `b2 --help flags.check-has-flag`. It isn't
> > integrated into the html docs yet.
> >
> > Note 2: This is pretty new, so if you run into
> > any problems, please let me know.
> >
> > Note 3: It might be more reliable to separate
> > the object files out and set shared on them:
> > obj x.o : x.cpp : shared ;
> > ...
> > lib l : x.o y.o ... ;
> > (This will only work if the library is one
> > that is specifically built for the test, not
> > if it's a generic Boost library.)
>
> Note 4: (from @pdimov)
>
> **This should probably be a feature, like `on`, which
> toolsets translate to -fPIC as appropriate.**
>
Contributor guide
Research direction
Start with the Boost.Build handling described in the issue and run `b2 --help flags.check-has-flag` to understand the existing flag-checking support. Review how toolsets translate features, then define the position-independent feature behavior for shared-library use and confirm that supported toolsets apply the appropriate compiler flags.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- build-system
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100