Hi all, Currently the official released pre-built binaries for Linux include: - RPM packages for RedHat-based Linux distros - DEB packages for Debian-based Linux distros - APK packages for Alpine-based Linux distros
Though they are provided in different Linux distributions, they are all compiled with GCC. However, only the RPM package is built with GCC < 5. GCC 5 brings a breaking ABI change [1] to the std::string, which is widely used in the Pulsar C++ client interfaces as the byte array. In short, the impact is, if you're using GCC >= 5 1. You have to add the -D_GLIBCXX_USE_CXX11_ABI=0 compile option to use the pre-built RPM package. 2. If your application depends on other 3rd party libraries that are built with GCC >= 5, the pre-built RPM package cannot be used together. So for users that use GCC >= 5, the current RPM package is very unfriendly especially for the 2nd case. As a workaround, they have to build libraries by themselves, while installing dependencies might be complicated in C++ world. However, CentOS 7, whose EOL is 2024-06-30 [2], is still widely used. In addition, if you're going to upgrade your GCC via devtoolset, the installed GCC still does not have the cxx11 ABI [3]. So I don't think it's good to drop the support for old ABIs for RedHat users. In short, I suggest adding separated pre-built binaries with new ABIs for RPM packages. The hierarchy will be: rpm-arm64/aarch64/ ---- RPMs with new ABIs rpm-arm64/aarch64/legacy ---- RPMs with old ABIs rpm-x86_64/x86_64/ ---- RPMs with new ABIs rpm-x86_64/x86_64/legacy ---- RPMs with old ABIs See [4] for the current hierarchy. After that, we should document the difference here [5]. [1] https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html [2] https://wiki.centos.org/About/Product [3] https://bugzilla.redhat.com/show_bug.cgi?id=1546704 [4] https://archive.apache.org/dist/pulsar/pulsar-client-cpp-3.3.0/ [5] https://pulsar.apache.org/docs/3.1.x/client-libraries-cpp-setup/ Thanks, Yunze