2013-04-25 46 views
2

我试图建立基于Matlab 2012A C程序,通过命令:错误建设MEX-文件(MATLAB 2012A)上的Kubuntu“的/ usr /斌/劳工处:找不到-lstdC++

mex mat_trans2.c

而且我得到这个错误:

/usr/bin/ld: cannot find -lstdc++ 
collect2: ld returned 1 exit status 

    mex: link of ' "mat_trans2.mexa64"' failed. 

Error using mex (line 206) 
Unable to complete successfully. 

前一段时间我是能够建立.c文件,我不知道现在发生了什么事!在我的Kubuntu 12.04 64位上进行系统升级后,情况可能会发生变化。

有人知道如何解决这个问题吗?

谢谢!!!!

编辑:我编辑邮件在Shai回复。 运行:

mex -v mat_trans2.c

我得到:

************************************************************************** 
    Warning: Neither -compatibleArrayDims nor -largeArrayDims is selected. 
      Using -compatibleArrayDims. In the future, MATLAB will require 
      the use of -largeArrayDims and remove the -compatibleArrayDims 
      option. For more information, see: 
      http://www.mathworks.com/help/techdoc/matlab_external/bsflnue-1.html 
************************************************************************** 

/home/mafalda/MATLAB/bin/mex: 1: /home/mafalda/MATLAB/bin/util/oscheck.sh: /lib64/libc.so.6: not found 
/home/mafalda/MATLAB/bin/mex: 1: /home/mafalda/MATLAB/bin/util/oscheck.sh: /lib64/libc.so.6: not found 
-> mexopts.sh sourced from directory (DIR = $PREF_DIR) 
    FILE = /home/mafalda/.matlab/R2012a/mexopts.sh 
---------------------------------------------------------------- 
-> MATLAB    = /home/mafalda/MATLAB 
-> CC     = gcc-4.4 
-> CC flags: 
     CFLAGS    = -ansi -D_GNU_SOURCE -fexceptions -fPIC -fno-omit-frame-pointer -pthread 
     CDEBUGFLAGS  = -g 
     COPTIMFLAGS  = -O -DNDEBUG 
     CLIBS    = -Wl,-rpath-link,/home/mafalda/MATLAB/bin/glnxa64 -L/home/mafalda/MATLAB/bin/glnxa64 -lmx -lmex -lmat -lm -lstdc++ 
     arguments   = -DMX_COMPAT_32 
-> CXX     = g++-4.4 
-> CXX flags: 
     CXXFLAGS   = -ansi -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread 
     CXXDEBUGFLAGS  = -g 
     CXXOPTIMFLAGS  = -O -DNDEBUG 
     CXXLIBS   = -Wl,-rpath-link,/home/mafalda/MATLAB/bin/glnxa64 -L/home/mafalda/MATLAB/bin/glnxa64 -lmx -lmex -lmat -lm 
     arguments   = -DMX_COMPAT_32 
-> FC     = gfortran-4.4 
-> FC flags: 
     FFLAGS    = -fexceptions -fbackslash -fPIC -fno-omit-frame-pointer 
     FDEBUGFLAGS  = -g 
     FOPTIMFLAGS  = -O 
     FLIBS    = -Wl,-rpath-link,/home/mafalda/MATLAB/bin/glnxa64 -L/home/mafalda/MATLAB/bin/glnxa64 -lmx -lmex -lmat -lm 
     arguments   = -DMX_COMPAT_32 
-> LD     = gcc-4.4 
-> Link flags: 
     LDFLAGS   = -pthread -shared -Wl,--version-script,/home/mafalda/MATLAB/extern/lib/glnxa64/mexFunction.map -Wl,--no-undefined 
     LDDEBUGFLAGS  = -g 
     LDOPTIMFLAGS  = -O 
     LDEXTENSION  = .mexa64 
     arguments   = 
-> LDCXX     = 
-> Link flags: 
     LDCXXFLAGS   = 
     LDCXXDEBUGFLAGS = 
     LDCXXOPTIMFLAGS = 
     LDCXXEXTENSION  = 
     arguments   = 
---------------------------------------------------------------- 

-> gcc-4.4 -c -I/home/mafalda/MATLAB/extern/include -I/home/mafalda/MATLAB/simulink/include -DMATLAB_MEX_FILE -ansi -D_GNU_SOURCE -fexceptions -fPIC -fno-omit-frame-pointer -pthread -DMX_COMPAT_32 -O -DNDEBUG "mat_trans2.c" 

-> gcc-4.4 -O -pthread -shared -Wl,--version-script,/home/mafalda/MATLAB/extern/lib/glnxa64/mexFunction.map -Wl,--no-undefined -o "mat_trans2.mexa64" mat_trans2.o -Wl,-rpath-link,/home/mafalda/MATLAB/bin/glnxa64 -L/home/mafalda/MATLAB/bin/glnxa64 -lmx -lmex -lmat -lm -lstdc++ 

/usr/bin/ld: cannot find -lstdc++ 
collect2: ld returned 1 exit status 

    mex: link of ' "mat_trans2.mexa64"' failed. 

Error using mex (line 206) 
Unable to complete successfully. 

我想说的问题是,/lib64/libc.so.6:无法找到

加:

locate libstdc++.so.6 
/home/mafalda/MATLAB/bin/glnxa64/libstdc++.so.6 
/home/mafalda/MATLAB/bin/glnxa64/libstdc++.so.6.0.13 
/home/mafalda/MATLAB/sys/os/glnxa64/libstdc++.so.6 
/home/mafalda/MATLAB/sys/os/glnxa64/libstdc++.so.6.0.16 
/home/mafalda/MATLAB/toolbox/edalink/foundation/hdllink/scripts/linux32/libstdc++.so.6 
/home/mafalda/MATLAB/toolbox/edalink/foundation/hdllink/scripts/linux32/libstdc++.so.6.0.13 
/home/mafalda/MATLAB/toolbox/sldv/sldv/polyspace-dvo/lib/x86-linux/libstdc++.so.6 
/usr/lib/i386-linux-gnu/libstdc++.so.6 
/usr/lib/i386-linux-gnu/libstdc++.so.6.0.16 
/usr/lib/x86_64-linux-gnu/libstdc++.so.6 
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16 
/usr/lib32/libstdc++.so.6 
/usr/lib32/libstdc++.so.6.0.16 
+0

尝试用'-v'来获取更多信息。看看'LD_LIBRARY_PATH' mex正在使用。 – Shai 2013-04-25 16:18:04

+0

我按错误删除了一条消息,如果我理解正确,建议创建一个符号链接到文件的真实位置,但是当我运行'ln -s /lib/x86_64-linux-gnu/libc.so时。 6 /lib64/libc.so.6'我得到:无法创建符号链接'/lib64/libc.so。6':文件存在 – mafalda 2013-04-25 16:57:10

+0

不,那是我对不起,我将我的评论移到了答案中;) – Amro 2013-04-25 17:12:48

回答

1

平凡解,我没有检查最明显的事情:

$ sudo apt-get install libstdc++6-4.4-dev

+1

对我来说,这两个答案的组合工作:安装libstdC++ 6-4.4-dev并运行MATLAB预加载:'LD_PRELOAD =“/ usr/lib/x86_64-linux -gnu/libstdC++。so.6“matlab”。 – lapis 2013-06-17 20:17:51

2

尝试启动MATLAB:

$ LD_PRELOAD=/usr/lib/libstdc++.so.6 matlab 

(或任何您系统上的实际位置)。

您还可以创建在/lib64/libc.so.6一个符号链接指向它

+0

其实我已经总是启动matlab:LD_PRELOAD =/usr/lib/x86_64-linux-gnu/libstdC++。 matlab – mafalda 2013-04-25 17:03:16

+1

也许'gcc'调用需要被告知在哪里可以找到'-lstdC++',即'-L/path/to/lib'?首先尝试通过再次运行'mex -setup'重新创建'mexopts.sh'文件 – Amro 2013-04-25 17:07:26

+0

ok我可能已经改变了一些错误,因为我在通过前面的字符串启动matlab时收到以下消息:错误:ld.so:object无法预加载来自LD_PRELOAD的'/usr/lib/x86-linux-gnu/libstdc++.so.6':忽略。 – mafalda 2013-04-25 17:14:07

0

尝试安装软件包:

须藤荫安装libstdC++ - static

0

由于我没有评论的声望,我想说@mafalda的回答为我工作。我只需要在他的答案中用4.7代替4.4,因为我使用的是gcc-4.7编译器。即使最新版本的MATLAB(R2016a截至目前)也只支持gcc-4.7.x(而不是4.8.x(现在是最新版本)),但我想指出是否有人使用这个答案,只需将4.4替换为4 .x其中x取决于您的gcc编译器版本。

1

我得到了同样的错误,经过几个小时的尝试不同的解决方案,它看起来像我发现如何解决它在我的情况。 解决的办法是简单地创建一个从libstdc++.so.6libstdc++.so的符号链接。所以: cd到/usr/lib/x86_64-linux-gnu/并运行sudo ln -s libstdc++.so.6 libstdc++.so。 我希望它也能适用于你的案例。

相关问题