Mex在64位linux上编译 - / usr / bin / ld:找不到-lstdc ++

时间:2013-06-08 15:14:10

标签: matlab mex

好的我正在尝试在64位linux上编译mex文件,ubuntu与Matlab 2013a一样精确。

首先它发出错误,找不到GLIBCXX_3.4.15。哪个不属于 /usr/local/MATLAB/R2013a/sys/os/glnxa64/libstdc++.so.6。我找到了这个帖子/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found,并在ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17 libstdc++.so.6

中成功创建了一个符号链接/usr/local/MATLAB/R2013a/sys/os/glnxa64

现在我尝试再次编译,现在我得到/usr/bin/ld: cannot find -lstdc++ collect2: error: ld returned 1 exit status

这是输出

>> mex -v tload3.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/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html
**************************************************************************

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


Warning: You are using gcc version "4.7.3".  The version
         currently supported with MEX is "4.4.x".
         For a list of currently supported compilers see: 
         http://www.mathworks.com/support/compilers/current_release/

-> gcc -c  -I/usr/local/MATLAB/R2013a/extern/include -I/usr/local/MATLAB/R2013a/simulink/include -DMATLAB_MEX_FILE -ansi -D_GNU_SOURCE  -fexceptions -fPIC -fno-omit-frame-pointer -pthread  -DMX_COMPAT_32 -O -DNDEBUG  "tload3.c"

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

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

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

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

ps有另一个大约有相同标题的帖子Error building MEX-files (MATLAB 2012a) on Kubuntu '/usr/bin/ld: cannot find -lstdc++',不幸的是答案,安装sudo apt-get install libstdc++6-4.4-dev对我来说不起作用。

5 个答案:

答案 0 :(得分:3)

使用MATLAB 2013a在Ubuntu 13.04上出现同样的问题。 我解决了这个问题:

sudo mv /usr/local/MATLAB/R2013a/sys/os/glnxa64/libstdc++.so.6 /usr/local/MATLAB/R2013a/sys/os/glnxa64/libstdc++.so.6.old

保留备份以防万一。

然后是一个符号链接:

sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17 /usr/local/MATLAB/R2013a/sys/os/glnxa64/libstdc++.so.6

答案 1 :(得分:2)

请看这一行gcc -O -pthread -shared -Wl,--version-script,/usr/local/MATLAB/R2013a/extern/lib/glnxa64/mexFunction.map -Wl,--no-undefined -o "tload3.mexa64" tload3.o -Wl,-rpath-link,/usr/local/MATLAB/R2013a/bin/glnxa64 -L/usr/local/MATLAB/R2013a/bin/glnxa64 -lmx -lmex -lmat -lm -lstdc++

带L的选项是gcc /链接器查找库的位置。 Id sugest尝试将符号链接放在/ usr / local / MATLAB / R2013a / bin / glnxa64(libstdc ++。so.6在2012a中),并从终端启动matlab,它会在那里吐出一些错误。或者将新文件夹添加为CLIB参数。

我还会删除c的-ansi部分(将其替换为-std=c99),这样就不会在c代码中使用\ style注释时出错。

答案 2 :(得分:2)

我有同样的问题,这对我有用

导航到以下路径cd /usr/local/MATLAB/R2013a/sys/os/glnxa64/,(您的路径可能会有所不同)然后删除libstdc库(或更安全地重命名)

sudo mv libstdc++.so.6 libstdc++.so.6.old

我有相同的配置,Ubuntu Linux 64位与Matlab 2013a

答案 3 :(得分:2)

您在libstdc++.so.6中创建了/usr/local/MATLAB/R2013a/bin/glnxa64链接到系统中由 apt-get install libstdc++6-4.4-dev 安装的库。

现在尝试在libstdc++.so中创建一个名为libstdc++.so.6 /usr/local/MATLAB/R2013a/bin/glnxa64的链接。

答案 4 :(得分:2)

我遇到了同样的问题,所有发布的解决方案都没有对我有用(即删除或添加新的符号链接),结果发现我没有安装相应的编译器包!

对我来说,解决方案是:

sudo yum install gcc-g++

我在64位Linux(RHEL 6)上运行MATLAB 2014b。