In mex files, where does output to stdout and stderr go?
Show older comments
If I link an external library to a mex file, and this library sends text output to stdout or stderr, what does MATLAB do with this output? Is there any way of saving it?
Answers (3)
Oliver Woodford
on 12 May 2015
Edited: Oliver Woodford
on 12 May 2015
1 Comment
Oliver Woodford
on 12 May 2015
Andrew Stevens
on 11 Feb 2018
Edited: Andrew Stevens
on 11 Feb 2018
2 votes
Additionally to Olivers solution:
- In R2016 under Linux it would seem that mexPrintf itself uses iostream (internally). You have to switch the stream buffer back to the original for the mexPrintf call to avoid a stack overflow.
- In R2016 under Linux at least mexPrintf appears to check the thread from which it is being called (presumably because mx/mex API is not thread safe). If the calling stack is not the same as that used to enter mexFunction it merely logs "Error writing to output stream". The test (or is it a breakage?) alas is rather conservative: it triggers even if the "thread" is actually just a lightweight coroutine library like quickthreads is being used (e.g. SystemC).
The work-around is to buffer the output in the custom streambuf and flush only from the calling thread.
Tianyang Li
on 6 Jan 2015
1 vote
If you start maltab using -nojvm then stdout and stderr are visible.
1 Comment
A.B.
on 3 Apr 2020
This is the solution. Thanks for sharing.
Categories
Find more on MATLAB Compiler SDK in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!