-
-
Notifications
You must be signed in to change notification settings - Fork 269
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
Binary compatibility between conda-forge and defaults #616
Comments
Adding some info, as I was hunting for the actual recipes recently, and found this issue first:
|
Any statment on this regard, on Windows (10) binary compatibility ? |
Win10 binary compatibility is simpler. You have classes of compatibility. It depends on which compiler gets used. Stuff compiled with VS 2008 is associated with python 2.7. VS2015 is associated with python 3.5 and up. VS2017 is compatible with VS2015, but there are some small details. If you build something with VS2017, you need the VS 2017 runtimes (called vs2015_runtime, so that they don't coexist with actual vs 2015 runtimes, because they have the same filenames). The vs 2017 runtimes work with software compiled with VS 2015. It's like the bounds for libstdc++: bundle the newest runtime, and you'll be fine. Our compiler activation packages are set up to take care of this for you. |
@msarahan Thanks for you quick feedback. |
@jjhelmus Is this still the place to track progress? If so, what's the status? I've noticed that some I'm asking since I'm in the process of building packages that have runtime dependencies on I'm sorry if this has already been discussed elsewhere, but unfortunately I can't see the forest through the trees at the moment. |
Yes the packages on |
Apologies for raising this old thread, but it seems to be the best/most canonical source of information regarding C++ ABI compatibility on Is it still the case that C++ packages on I ask, because I am continually running into problems where it appears that this is not the case. For example, the latest version of
Now note that the functions in the
Am I simply misguided or misinformed? Or should I expect that certain packages on |
conda-forge completed the migration to the "new" compilers in January of 2019. These compilers use the newer C++11 ABI. Packages should no longer be compiled with the I'm closing this issue since the migration to the new compiler removes the compatibility concerns discussed in this issue. |
The topic of binary compatibility between the packages in the
conda-forge
anddefaults
has been often discussed in feedstocks, mailing lists and in-person but I do not believe there is an issue for discussing the issue in general. I wanted to create such an issue to document these incompatibilities, collect some representative examples and discuss/track progress on a solution.Currently, the linux-64 packages in
conda-forge
are compiled using the GCC 4.8.2 toolchain from devtoolset-2 inside a CentOS 6 docker container.The packages in
defaults
are compiled using a GCC 7.2 toolchain created using crosstools-ng and distributed as conda packages. Builds are done inside a CentOS 6 docker container.These two toolchains use different C++ ABIs. The GCC 7.2 toolchain used by
defaults
uses the "new" ABI where as the devtoolset-2 toolchain inconda-forge
uses the "old" ABI. Passing the-D_GLIBCXX_USE_CXX11_ABI=0
argument can be used to change which ABI is produced by the GCC 7.2 compiler but-D_GLIBCXX_USE_CXX11_ABI=1
cannot be used to change the ABI target of the devtoolset-2 toolchain. These two ABI are not compatible and mixing libraries and binaries with different ABIs will fail. Specifically, the linker will not be able to resolve symbols as different symbol names are used by the two ABIs. Compute Canada has a nice document providing more details on the dual C++ ABI.mosh
provides a nice example of this incompatibility as it links tolibprotobuf
, a C++ library. The mosh-client binary works when used with thelibprotobuf
package from theconda-forge
channel which uses the old C++ ABI:The binary fails with the
libprotobuf
package fromdefaults
which uses the new C++ ABI.A few C++ libraries that I am aware of that are incompatible between
conda-forge
anddefaults
are:I do not believe the different toolchains produce incompatible C libraries or binaries.
I am not aware of any Fortran incompatibilities but would not be surprised if they exist as the ABI was broken in GCC 7.
The text was updated successfully, but these errors were encountered: