Mex problems on 64bit machine
Mostra commenti meno recenti
I have a code which creates a mex file fine on a 32 bit machine but it does not work correctly for a 64 bit machine. The code compiles without errors or warnings however when I run the code I get a segmentation fault.
Does anyone have a suggestion of how to fix this?
Here is the output from the crash.
------------------------------------------------------------------------
Segmentation violation detected at Wed Aug 10 15:12:08 2011
------------------------------------------------------------------------
Configuration:
Crash Decoding : Disabled
Current Visual : 0x21 (class 4, depth 24)
Default Encoding: UTF-8
GNU C Library : 2.13 stable
MATLAB License : 207107
MATLAB Root : /usr/local/MATLAB/R2011a
MATLAB Version : 7.12.0.635 (R2011a)
Operating System: Linux 2.6.38-10-generic #46-Ubuntu SMP Tue Jun 28 15:07:17 UTC 2011 x86_64
Processor ID : x86 Family 6 Model 10 Stepping 7, GenuineIntel
Virtual Machine : Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode
Window System : The X.Org Foundation (11001000), display :0.0
Fault Count: 1
Abnormal termination:
Segmentation violation
Register State (from fault):
RAX = 30a3d42800007fd6 RBX = 0000000000000000
RCX = 00007fd630a456c0 RDX = 0000000000000000
RSP = 00007fd653276760 RBP = 00007fd653276760
RSI = 00007fd653276f40 RDI = 00007fd653277004
R8 = 00007fd62e970440 R9 = 00007fd663749400
R10 = 00007fd6532765d0 R11 = 00007fd65c61df50
R12 = 0000000000000002 R13 = 00007fd653277000
R14 = 00007fd62c0d4b40 R15 = 00007fd653276990
RIP = 00007fd663795847 EFL = 0000000000010246
CS = 0033 FS = 0000 GS = 0000
Stack Trace (from fault):
[ 0] 0x00007fd663a48f49 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwfl.so+00474953 fl::sysdep::linux::unwind_stack(void const**, unsigned long, unsigned long, fl::diag::thread_context const&)+000009
[ 1] 0x00007fd6639fedc1 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwfl.so+00171457 fl::diag::stacktrace_base::capture(fl::diag::thread_context const&, unsigned long)+000161
[ 2] 0x00007fd663a080dd /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwfl.so+00209117
[ 3] 0x00007fd663a08364 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwfl.so+00209764 fl::diag::terminate_log(char const*, fl::diag::thread_context const&, bool)+000100
[ 4] 0x00007fd662a74be5 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00420837 fl::diag::terminate_log(char const*, ucontext const*, bool)+000085
[ 5] 0x00007fd662a71b54 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00408404
[ 6] 0x00007fd662a7303d /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00413757
[ 7] 0x00007fd662a73197 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00414103
[ 8] 0x00007fd662a73b1d /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00416541
[ 9] 0x00007fd662a74435 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00418869
[ 10] 0x00007fd6615cac60 /lib/x86_64-linux-gnu/libpthread.so.0+00064608
[ 11] 0x00007fd663795847 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmx.so+00292935 mxgetpr_+000007
[ 12] 0x00007fd625c1f9ea /home/adrianna/Research/mex_lowrank/id_decomp.mexa64+00002538 mexfunction_+000182
[ 13] 0x00007fd65c61dfbc /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libmex.so+00049084 mexRunMexFile+000108
[ 14] 0x00007fd65c61af19 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libmex.so+00036633
[ 15] 0x00007fd65c61bbbe /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libmex.so+00039870
[ 16] 0x00007fd6627e97ef /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_dispatcher.so+00391151 Mfh_file::dispatch_fh(int, mxArray_tag**, int, mxArray_tag**)+000511
[ 17] 0x00007fd6620f01f0 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01532400
[ 18] 0x00007fd662091975 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01145205
[ 19] 0x00007fd6620ab96e /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01251694
[ 20] 0x00007fd6620b00ec /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01269996
[ 21] 0x00007fd6620adc7a /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01260666
[ 22] 0x00007fd6620ae741 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01263425
[ 23] 0x00007fd6621077d9 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01628121
[ 24] 0x00007fd6627e97ef /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_dispatcher.so+00391151 Mfh_file::dispatch_fh(int, mxArray_tag**, int, mxArray_tag**)+000511
[ 25] 0x00007fd6620e39b2 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01481138
[ 26] 0x00007fd6620a5e13 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01228307
[ 27] 0x00007fd6620a4eb7 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01224375
[ 28] 0x00007fd6620a5397 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so+01225623
[ 29] 0x00007fd662cb38fe /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwbridge.so+00108798
[ 30] 0x00007fd662cb44ae /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwbridge.so+00111790 mnParser+000622
[ 31] 0x00007fd662a5cd39 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00322873 mcrInstance::mnParser_on_interpreter_thread()+000041
[ 32] 0x00007fd662a3fdb2 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00204210
[ 33] 0x00007fd662a3fec0 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00204480
[ 34] 0x00007fd6593e1db6 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libmwuix.so+00437686
[ 35] 0x00007fd6593eb13d /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libmwuix.so+00475453
[ 36] 0x00007fd659e370bd /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libuij.so+00217277 sysq::during_F<boost::weak_ptr<sysq::ws_ppeHook>, boost::shared_ptr<sysq::ws_ppeHook> > std::for_each<__gnu_cxx::__normal_iterator<boost::weak_ptr<sysq::ws_ppeHook>*, std::vector<boost::weak_ptr<sysq::ws_ppeHook>, std::allocator<boost::weak_ptr<sysq::ws_ppeHook> > > >, sysq::during_F<boost::weak_ptr<sysq::ws_ppeHook>, boost::shared_ptr<sysq::ws_ppeHook> > >(__gnu_cxx::__normal_iterator<boost::weak_ptr<sysq::ws_ppeHook>*, std::vector<boost::weak_ptr<sysq::ws_ppeHook>, std::allocator<boost::weak_ptr<sysq::ws_ppeHook> > > >, __gnu_cxx::__normal_iterator<boost::weak_ptr<sysq::ws_ppeHook>*, std::vector<boost::weak_ptr<sysq::ws_ppeHook>, std::allocator<boost::weak_ptr<sysq::ws_ppeHook> > > >, sysq::during_F<boost::weak_ptr<sysq::ws_ppeHook>, boost::shared_ptr<sysq::ws_ppeHook> >)+000077
[ 37] 0x00007fd659e38989 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libuij.so+00223625
[ 38] 0x00007fd659e354ae /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libuij.so+00210094 svWS_ProcessPendingEvents(int, int, bool)+000494
[ 39] 0x00007fd662a3e1c7 /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00197063
[ 40] 0x00007fd662a3e60a /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00198154
[ 41] 0x00007fd662a3ed6f /usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so+00200047
[ 42] 0x00007fd6615c1d8c /lib/x86_64-linux-gnu/libpthread.so.0+00028044
[ 43] 0x00007fd66130d04d /lib/x86_64-linux-gnu/libc.so.6+00942157 clone+000109
1 Commento
Adrianna
il 10 Ago 2011
Modificato: Walter Roberson
il 14 Feb 2018
Risposte (1)
James Tursa
il 10 Ago 2011
You need to strictly follow the API types. You don't get automatic argument type conversion in Fortran like you do in C. Change these lines:
INTEGER PLHS(*), PRHS(*)
INTEGER NLHS, NRHS
INTEGER mxCreateDoubleMatrix,mxMalloc
INTEGER mxGetPr,mxGetM,mxGetN,mxIsComplex
INTEGER A_p, INPUT2_p, T_p, rnorms_p, indvec_p, indveci_p
INTEGER m, n, k, flag_fixed_k, flag_complex
To these:
mwPointer PLHS(*), PRHS(*)
INTEGER*4 NLHS, NRHS
mwPointer, external :: mxCreateDoubleMatrix,mxMalloc
mwPointer, external :: mxGetPr
mwSize, external :: mxGetM,mxGetN
INTEGER*4, external :: mxIsComplex
mwPointer A_p, INPUT2_p, T_p, rnorms_p, indvec_p, indveci_p
mwSize m, n, k, p
INTEGER*4 flag_fixed_k, flag_complex
And change this line:
k = min(int(INPUT2(1)), min(m,n))
To these:
p = INPUT2(1)
k = min(p, min(m,n))
And change this line:
CALL mxCopyPtrToReal8(INPUT2_p,INPUT2,1)
To these:
p = 1
CALL mxCopyPtrToReal8(INPUT2_p,INPUT2,p)
And change this line:
PLHS(3) = mxCreateDoubleMatrix(1,n,0)
To these:
p = 1
PLHS(3) = mxCreateDoubleMatrix(p,n,0)
And change this line:
PLHS(2) = mxCreateDoubleMatrix(1,n,0)
To these:
p = 1
PLHS(2) = mxCreateDoubleMatrix(p,n,0)
As a side comment, you have some pretty strange code in there for copying mxArray variables and for changing the sizes of pre-existing mxArray variables.
Categorie
Scopri di più su Write C Functions Callable from MATLAB (MEX Files) in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!