matlab 64位 mex 32,C Mex文件在64位Linux上崩溃了matlab,但没有32位窗口崩溃,但程序在Matlab外运行正常...

警告我在问题中提供的代码可能会使matlab和您的机器崩溃!

我已经为C类编写了一个mex网关函数 . 如果我使用R2008a在32Bit windows上编译这个mex函数我没有问题 . 如果我在运行64位Scientific Linux(Red Hat Enterprize Linux版本)的Matlab R2011a上编译并运行,那么在调用mexfunction时,matlab将以段错误退出,尽管它似乎在程序的中途运行 . 可以在两个平台上的Matlab之外编译和运行C类(使用main函数),没有错误 . 我在Windows机器上使用Microsoft Visual C Express Edition,在Linux机器上使用gcc 4.4.5 .

造成这种情况的原因是什么?我能解决吗?

可以从http://www.see.ed.ac.uk/~s0237326/downloads/mexcrash.zip下载包含重现问题所需的代码和数据文件的zip文件 . 此zip文件包含.m和.cpp源代码,以及用于测试的文本文件(Temp.fem,10kB) . 文件fmeshersetup.m显示了我用来编译的命令 . 文件Test_mexfmesher.m运行带有适当输入的mexfunction进行测试 . mex网关功能是mexfmesher.cpp,它调用fmesher类,它由fmesher目录中的文件组成 .

总共有13个C源文件,有点期待有人调试,甚至是发生段错误的特定行也会引起人们的兴趣 .

不幸的是,我无法访问可以与Matlab连接的64位Linux上的图形化调试器,并且希望有人能够立即看到问题,或者这将是一个已知问题 . 如上所述,当不作为mex文件运行时,程序运行正常,所以我无法在另一个工具中找到错误,而且我对gdb不是很熟悉 . 我认为问题可能与调用C函数'free'有关 .

以下是segfault的回溯:

Program received signal SIGSEGV, Segmentation fault.

0x00007ffff721be36 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwservices.so

(gdb) backtrace

#0 0x00007ffff721be36 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwservices.so

#1 0x00000034daa914f2 in std::basic_ostream >::flush() () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libstdc++.so.6

#2 0x00007ffff72302b0 in ioFlush () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwservices.so

#3 0x00007ffff61303f5 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#4 0x00007ffff61330ec in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#5 0x00007ffff6130c7a in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#6 0x00007ffff6131741 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#7 0x00007ffff618a7d9 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#8 0x00007ffff686d7ef in Mfh_file::dispatch_fh(int, mxArray_tag**, int, mxArray_tag**) () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_dispatcher.so

#9 0x00007ffff61731f0 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#10 0x00007ffff6114975 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#11 0x00007ffff612e96e in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#12 0x00007ffff61330ec in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#13 0x00007ffff6130c7a in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#14 0x00007ffff6131741 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#15 0x00007ffff618a7d9 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#16 0x00007ffff686d7ef in Mfh_file::dispatch_fh(int, mxArray_tag**, int, mxArray_tag**) () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_dispatcher.so

#17 0x00007ffff61669b2 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#18 0x00007ffff6128e13 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#19 0x00007ffff6127eb7 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#20 0x00007ffff6128397 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwm_interpreter.so

#21 0x00007ffff6d378fe in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwbridge.so

#22 0x00007ffff6d384ae in mnParser () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwbridge.so

#23 0x00007ffff6ae0d39 in mcrInstance::mnParser_on_interpreter_thread() () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so

#24 0x00007ffff6ac3db2 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so

#25 0x00007ffff6ac3ec0 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so

#26 0x00007fffee8badb6 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libmwuix.so

#27 0x00007fffee8c413d in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libmwuix.so

#28 0x00007fffef3110bd in sysq::during_F<:weak_ptr>, boost::shared_ptr<:ws_ppehook> > std::for_each<:__normal_iterator>*, std::vector<:weak_ptr>, std::allocator<:weak_ptr> > > >, sysq::during_F<:weak_ptr>, boost::shared_ptr<:ws_ppehook> > >(__gnu_cxx::__normal_iterator<:weak_ptr>*, std::vector<:weak_ptr>, std::allocator<:weak_ptr> > > >, __gnu_cxx::__normal_iterator<:weak_ptr>*, std::vector<:weak_ptr>, std::allocator<:weak_ptr> > > >, sysq::during_F<:weak_ptr>, boost::shared_ptr<:ws_ppehook> >) ()

from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libuij.so

#29 0x00007fffef312989 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libuij.so

#30 0x00007fffef30f4ae in svWS_ProcessPendingEvents(int, int, bool) () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/../../bin/glnxa64/libuij.so

#31 0x00007ffff6ac21c7 in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so

#32 0x00007ffff6ac260a in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so

#33 0x00007ffff6ac2d6f in ?? () from /opt/matlab-2011a/bin/glnxa64/../../bin/glnxa64/libmwmcr.so

#34 0x00000034d7a077e1 in start_thread () from /lib64/libpthread.so.0

#35 0x00000034d72e573d in clone () from /lib64/libc.so.6

(gdb) quit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值