MRPT / mrpt

:zap: The Mobile Robot Programming Toolkit (MRPT)
https://docs.mrpt.org/reference/latest/
BSD 3-Clause "New" or "Revised" License
1.95k stars 630 forks source link

Errors building with MinGW 4.9 (Was: The Eigen/Array header does no longer exist in Eigen3) #225

Closed prpsymbol closed 8 years ago

prpsymbol commented 8 years ago

Hi all, I am trying to compile mrpt 1.3.2 under Windows and MinGW32. The CMake configuration has the EIGEN_USE_EMBEDDED_VERSION checked, and my make command is [mingw32-make -f makefile CXXFLAGS="-std=gnu++11" SHARED=1 UNICODE=1 BUILD=release]

The build explodes compiling bayes/CParticleFilter.cpp, and yields the error message "The Eigen/Array header does no longer exist in Eigen3. All that functionality has moved to Eigen/Core."

What am I doing wrong (besides building under Windows ;) )?

jlblancoc commented 8 years ago

Hi! I think that's already fixed in the master branch in GitHub... please, give it a try and re-open the issue if it's not.

Best,

prpsymbol commented 8 years ago

Hi Jose,

I just ran the build from a fresh check out from GIT, and I get the same error on the same file. How do I reopen the issue? Or should I just create an identical new one?

-Paul

From: Jose Luis Blanco-Claraco [mailto:notifications@github.com] Sent: Tuesday, April 12, 2016 12:39 PM To: MRPT/mrpt mrpt@noreply.github.com Cc: Poloniewicz, Paul Paul.Poloniewicz@Honeywell.com Subject: Re: [MRPT/mrpt] The Eigen/Array header does no longer exist in Eigen3 (#225)

Hi! I think that's already fixed in the master branch in GitHub... please, give it a try and re-open the issue if it's not.

Best,

— You are receiving this because you authored the thread. Reply to this email directly or view it on GitHubhttps://github.com/MRPT/mrpt/issues/225#issuecomment-208997706

jlblancoc commented 8 years ago

Strange... I'm reopening it for you. Please, could you attach the build log so I can follow the track the #include's leading to the error?

prpsymbol commented 8 years ago

BuildLog.txt

jlblancoc commented 8 years ago

Look at the sequence of #includes: it seems Eigen/Array is mistakenly trying to be included from GCC C++11 STL tuple!! Perhaps is a problem related to Windows & case insensitivity...

Quick solution: remove the file Eigen/Array !! If you want to investigate it a bit more: I think that only MRPT\otherlibs\eigen3 should be included with -I to GCC, so can't understand why #include <array> actually finds #include <Eigen/Array>... if possible, you could run mingw make with the environment variable VERBOSE=1 (set VERBOSE=1 in DOS) to see the full list of -I arguments...

In file included from C:/Qt/Tools/mingw492_32/i686-w64-mingw32/include/c++/tuple:39:0, from C:/Qt/Tools/mingw492_32/i686-w64-mingw32/include/c++/functional:55, from C:/Users/e815228/Documents/MRPT-SVN/otherlibs/eigen3/Eigen/Core:153, from C:/Users/e815228/Documents/MRPT-SVN/otherlibs/eigen3/Eigen/Dense:1, from C:/Users/e815228/Documents/MRPT-SVN/libs/base/include/mrpt/utils/types_math.h:31, from C:/Users/e815228/Documents/MRPT-SVN/libs/base/include/mrpt/math/CMatrixTemplateNumeric.h:13, from C:/Users/e815228/Documents/MRPT-SVN/libs/base/include/mrpt/random/RandomGenerators.h:13, from C:/Users/e815228/Documents/MRPT-SVN/libs/base/include/mrpt/random.h:13, from C:\Users\e815228\Documents\MRPT-SVN\libs\base\src\bayes\CParticleFilterCapable.cpp:13: C:/Users/e815228/Documents/MRPT-SVN/otherlibs/eigen3/Eigen/array:8:4: error: #error The Eigen/Array header does no longer exist in Eigen3. All that functionality has moved to Eigen/Core.

error The Eigen/Array header does no longer exist in Eigen3. All that functionality has moved to Eigen/Core.

Anyway, I'll close since it seems not to be general problem of MRPT...

prpsymbol commented 8 years ago

BuildLog.txt

Here is the verbose output. If the problem is case sensitivity, what files/directories are being confused?

prpsymbol commented 8 years ago

BuildLog.txt

Last log was with 'verbose' in the mingw23-make command, this one is with the DOS variable VERBOSE set to 1.

jlblancoc commented 8 years ago

The last buildlog was the key... I found a misplaced -isystem flag which, apparently, went unnoticed until now since in Linux, the case sensitivity of the filesystem shadowed the error. Thanks a lot for the feedback!

Try this patch and hopefully it's solved: https://github.com/MRPT/mrpt/commit/89a778edcbf66b3546e691b895f3ea4f86d5addd

prpsymbol commented 8 years ago

Thanks! That cured this problem… only to expose the next. Build log attached.

BuildLog.txt

jlblancoc commented 8 years ago

(Reopening and changing title)

prpsymbol commented 8 years ago

Hi Jose, thanks for the changes. I checked out a fresh version from the development trunk, and the build completed successfully. The bad news is that of the three applications I am interested in (simul-beacons, RawLogViewer, and rbpf-slam) the latter two crash with no error messages (i.e. "the application has stopped working" Windows pop up). Are you close to posting the 1.4 binaries for Windows?

jlblancoc commented 8 years ago

Hi,

If you tested it after the commit 23cb56f , then it looks like a problem with wxWidgets DLLs... make sure of building wxWidgets yourself so the mingw versions are compatible, use "dependcy walker" to make sure the .exe's find the correct DLLs, and if it still fails use Windows System Error Logs to identify the exact error cause...

prpsymbol commented 8 years ago

Hi. I did build the wxWidgets myself with the same toolchain. I ran the dependency walker tool, but I have no idea what I am looking at. It seems to be referencing the correct dlls (along with a thousand Microsoft dlls). The zip file contains the .dwi file. Meanwhile, I'll go look in the Windows error logs.

rbpf-slam.zip

prpsymbol commented 8 years ago

Here are the Windows Event Logs for the two crashes. rbpf-slam crashes when I run it, but rawlogviewer only crashes when I go to "raw map" and click "map from odometry". rawlogviewerEventLog.txt rbpfslamEventLog.txt

prpsymbol commented 8 years ago

I don't know what I grabbed for the rawlogviewer error, but here is the error similar to rbpf-slam: rawlogviewerEventLog2.txt

jlblancoc commented 8 years ago

Thanks! From all your info, it seems that there are actually more MinGW-specific errors...

I can't debug it myself soon, but if you are interested in trying, the next step would be to build, for example, rbpf-slam in Debug mode (if you use QtCreator, I think it is set under "Project" -> Build -> ...). You don't need to build the entire MRPT, just rbpf-slam. Also, add the -j4 to the mingw-make arguments to speed it up. When built, hit "Debug" (F5) and let me know where does it find the crash problem. The most interesting part would be the call stack at the instant of the crash (a screenshot will be great!)

Sorry for the inconveniences this is causing you! We haven't tested MinGW in a long time, so it seems some errors have been accumulating for this compiler...

prpsymbol commented 8 years ago

I haven't been using Qt for this so far, as I've been building using cmake/mingw32-make from the command line, but I can set it up to run under Qt (but I'll probably have to rebuild all of mrpt).

prpsymbol commented 8 years ago

I've had an interesting 2 days, as my main development PC crashed yesterday, which forced me to bring up the mrpt dev environment on another machine. Of course, when I got through with all of the installs and builds, the apps of interest to me (simul-beacons, rawlogviewer, and rbpf-slam) now all work just fine. I am not 100% sure what the difference is, but I suspect I did not use the USE_OPENGL=1 flag in the original build of wxWidgets. The build I did today used the following command:

mingw32-make -f makefile.gcc CXXFLAGS="-std=gnu++11" SHARED=1 USE_OPENGL=1 DEBUG_INFO=0 VENDOR=mrpt UNICODE=1 BUILD=release

Once my IT Support guys revive my main PC, I see if I can verify that was the difference.

jlblancoc commented 8 years ago

Good! :+1: