1

さて、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を見つけ、シンボリックリンクを正常に作成しまし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 ほぼ同じタイトルの別のスレッドがあります。Kubuntu '/usr/bin/ld: cannot find -lstdc++' で Error building MEX-files (MATLAB 2012a)、残念ながら答え、インストールsudo apt-get install libstdc++6-4.4-devはうまくいきませんでした。

4

5 に答える 5

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
于 2013-08-15T09:18:06.127 に答える
2

私は同じ問題を抱えていて、投稿された解決策はどれもうまくいきませんでした (つまり、新しいシンボリックリンクを削除または追加する)、適切なコンパイラパッケージをインストールしていないことが判明しました!

私にとって、解決策は次のとおりです。

sudo yum install gcc-g++

64 ビット Linux (RHEL 6) で MATLAB 2014b を実行しています。

于 2015-02-10T21:13:41.497 に答える
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

于 2013-10-12T21:34:45.010 に答える
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/リンカーがライブラリを探す場所です。/usr/local/MATLAB/R2013a/bin/glnxa64 (2012a には libstdc++.so.6 があります) にシンボリック リンクを配置し、端末から matlab を起動しようとすると、エラーが発生します。または、新しいフォルダーを CLIB 引数として追加します。

また-ansi、c の部分を削除して ( に置き換えます-std=c99)、c コードで \ スタイルのコメントを使用してもエラーが発生しないようにします。

于 2013-06-08T15:30:54.937 に答える