【问题标题】:Mex compiling on 64 bit linux - /usr/bin/ld: cannot find -lstdc++Mex 在 64 位 linux 上编译 - /usr/bin/ld: 找不到 -lstdc++
【发布时间】:2013-06-08 15:14:10
【问题描述】:

好的,我正在尝试在 64 位 linux 上编译 mex 文件,准确地说是使用 Matlab 2013a 的 ubuntu。

首先它给出了一个错误,它找不到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 并成功在/usr/local/MATLAB/R2013a/sys/os/glnxa64 中创建了一个符号链接ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17 libstdc++.so.6

现在我尝试再次编译,现在我得到/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 对我不起作用。

【问题讨论】:

    标签: matlab mex


    【解决方案1】:

    在使用 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
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,这对我有用

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

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

      我有同样的配置,Ubuntu Linux 64 bit with Matlab 2013a

      【讨论】:

      • 谢谢,我会在今天晚些时候尝试。
      • 不起作用。它说Error using mex (line 206) Unable to complete successfully.
      • 至少错误信息发生了变化:),尝试一个简单的 mex 文件以消除任何其他原因。
      【解决方案3】:

      看看这行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/链接器查找库的地方。我建议尝试将符号链接放入 /usr/local/MATLAB/R2013a/bin/glnxa64 (libstdc++.so.6 在 2012a 中),然后从终端启动 matlab,它会在那里吐出一些错误。或者将新文件夹添加为 CLIB 参数。

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

      【讨论】:

      • 感谢您的评论。我刚刚也在/usr/local/MATLAB/R2013a/bin/glnxa64 中创建了libstdc++.so.6,但它没有帮助。我仍然有同样的错误。删除 -ansi- 部分也没有帮助。
      • 当您从控制台启动 matlab 时,您是否在终端中收到任何警告/错误?
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,发布的解决方案都不适合我(即删除或添加新的符号链接),结果证明我没有安装适当的编译器包!

        对我来说,解决方案是:

        sudo yum install gcc-g++
        

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

        【讨论】:

          猜你喜欢
          • 2012-10-23
          • 1970-01-01
          • 2020-06-18
          • 1970-01-01
          • 1970-01-01
          • 2014-10-19
          • 2021-05-07
          • 2014-08-17
          • 1970-01-01
          相关资源
          最近更新 更多