我正在尝试通过以下命令在Matlab 2012a上构建一个C程序:
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 :(得分:2)
尝试启动MATLAB:
$ LD_PRELOAD=/usr/lib/libstdc++.so.6 matlab
(或系统上的实际位置)。
你也可以在/lib64/libc.so.6
指向它的
答案 1 :(得分:1)
琐碎的解决方案,我没有检查最明显的事情:
$ sudo apt-get install libstdc ++ 6-4.4-dev
答案 2 :(得分:1)
我得到了同样的错误,经过几个小时尝试不同的解决方案后,我发现在我的情况下我发现了如何解决它。
解决方案是简单地创建从libstdc++.so.6
到libstdc++.so
的符号链接。所以:
cd到/usr/lib/x86_64-linux-gnu/
并运行sudo ln -s libstdc++.so.6 libstdc++.so
。
我希望它也适用于你的情况。
答案 3 :(得分:0)
尝试安装软件包:
sudo yum install libstdc ++ - static
答案 4 :(得分:0)
由于我没有评论的声誉,我想说@mafalda的回答对我有用。我只需要在他的回答中替换4.4乘4.7,因为我使用的是gcc-4.7编译器。即使最新版本的MATLAB(R2016a截至目前)仅支持gcc-4.7.x(而不是4.8.x(现在是最新的)),我想指出是否有人使用这个答案,只需将4.4替换为4 .x其中x取决于你的gcc编译器版本。