Skip to content

Customize options.h for ABI consistency #43

@pitrou

Description

@pitrou

Solution to issue cannot be found in the documentation.

  • I checked the documentation.

Issue

abseil-cpp is used downstream by different packages, some of which build in C++17 mode, but others in C++14 or C++11 mode.

By default, the Abseil library has a different ABI depending on the C++ language version. However, it also offers a mechanism to solve this issue:
https://github.com/abseil/abseil-cpp/blob/37c5c2e5cc51db1bfb4a5d2f2c5494a394d80e56/absl/base/options.h#L15-L51

Quoting from this file:

// Diamond dependency problems can be avoided if all packages utilize the same
// exact version of Abseil. Building from source code with the same compilation
// parameters is the easiest way to avoid such dependency problems. However, for
// package managers who cannot control such compilation parameters, we are
// providing the file to allow you to inject ABI (Application Binary Interface)
// stability across builds. Settings options in this file will neither change
// API nor ABI, providing a stable copy of Abseil between packages.

Of course, once all transitively dependent packages are compiled in C++17 mode it becomes moot.

(see comment in Arrow PR for moving to C++17: apache/arrow#13991 (comment))

Installed packages

(not relevant)

Environment info

(not relevant)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions