-
-
Notifications
You must be signed in to change notification settings - Fork 10
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
Eigen version issue #19
Comments
Indeed we're running into issues when building cartographer at the moment: https://github.com/conda-forge/cartographer-feedstock/pull/20/checks?check_run_id=3629013766 Although we have a run_export, an incompatible version of eigen is pulled in. Any ideas why that is @conda-forge/ceres-solver @wolfv @traversaro? |
The
However, this will only ensure that any package that depends on ceres will have However, more in general I am bit puzzled by this check of ceres. In all the conda-forge-related packaging efforts we have being doing for robotics, we always implicitly assumed to be all Eigen 3.* release to never introduce ABI incompatibilities with respect to earlier versions. Note that with "ABI incompatibilities" I mean the ABI of downstream compiled libraries that use Eigen in their public interface, as Eigen by itself does not have an ABI as it is an header-only library. This is probably going to be a big problem if an ABI-incompatible Eigen is going to be released (Eigen 4?), but for the time being never gave problems, at least as I am able to remember. If this is not true, and instead Eigen is ABI incompatible even at the patch level, this is really a ticking bomb. However, I tried to find the exact problem that lead to add this check in ceres, and I was able to only find these commits:
|
See also conda-forge/eigen-feedstock#32 |
Thanks for your analysis, @traversaro! From reading what you say, I suggest there are two ways forward:
Considering that - as you said - in all other robotics related packages we assume that Eigen 3.* does not introduce ABI incompatibilities, my gut feeling is that we should go with 1). Thoughts? |
|
Indeed, all Eigen versions are rather compatible and option 1 seems to be the best. Option 2 would be a little terrible, as for large projects it can result in conflicts. If option 2 is implemented there needs to be released one version of ceres for each version of Eigen. |
or just bump ceres package build number when eigen package is upgraded, that's what I did recently |
Indeed, this can be done easily and does not prevent to do everything else discussed in this issue later, let's do it while we wait for feedback on this issue: #22 . |
Indeed in conda-forge/dartsim-feedstock#16 we experienced a problem that seems to be related to Eigen ABI (even if it appears only on Windows):
|
Possible fix: conda-forge/eigen-feedstock#41 . |
The CERES solver is quite particular about Eigen. If a conda forge recipe for CERES is built with a certain version of Eigen, and my conda environment has a different version of Eigen, then when I build a package which depends on CERES it will fail.
Here is the source of the problem: https://github.com/ceres-solver/ceres-solver/blob/ec4f2995bbde911d6861fb5c9bb7353ad796e02b/cmake/CeresConfig.cmake.in#L200
The only solution I can think of is for conda packages for CERES to exist for multiple versions of Eigen, and each such conda package should make it very clear what version of Eigen it will work with. As of now however meta.yml has no version of Eigen, which makes the CERES conda package install well but then things fail later.
The text was updated successfully, but these errors were encountered: