3

64ビットUbuntu12.10で32ビット2012aMatlabを使用してCコードをmexしようとしています

可能なすべてのライブラリ(gcc 4.7、build-essential、libs-32など)をダウンロードしましたが、次のエラーが発生します

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgomp.so when searching for -lgomp
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgomp.a when searching for -lgomp
/usr/bin/ld: cannot find -lgomp
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status

この問題は、64ビットライブラリから32ビットライブラリにシンボリックリンクを設定することで解決できることがわかりました。別のリンクを作成しようとしましたが、コンパイルを完了できませんでした。

前もって感謝します。

更新1

gcc-multilibが欠落していたため、

sudo apt-get install gcc-multilib 

次のエラーが発生します

Warning: You are using gcc version "4.7.2-2ubuntu1)".  The version
     currently supported with MEX is "4.4.6".
     For a list of currently supported compilers see: 
     http://www.mathworks.com/support/compilers/current_release/

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status

私のmexopts.shは次のようになります

CC='gcc'
CFLAGS='-ansi -D_GNU_SOURCE'
CFLAGS="$CFLAGS -fPIC -pthread -m32"
CFLAGS="$CFLAGS  -fexceptions"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64" 
CLIBS="$RPATH $MLIBS -lm"
COPTIMFLAGS='-O -DNDEBUG'
CDEBUGFLAGS='-g'
CLIBS="$CLIBS -lstdc++"

-m32はありますが、そのように書くべきかどうかはわかりません。誰かがmexopts.shを編集してmatlabに32ビットライブラリを表示させる方法について詳しく説明できますか?

更新2

g ++を使用したリンクを確認した後、-lstdc++の検索に失敗します

g++-multilibをインストールしようとしました

sudo apt-get install g++-multilib 

現在、エラーの形式は次のとおりです。

/usr/bin/ld: i386:x86-64 architecture of input file `bin/fv_cache.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `bin/obj_func.o' is incompatible    with i386 output
...
4

1 に答える 1

0
  • 最初に、gcc を実行してコマンド プロンプトから 32 ビット実行可能ファイルをビルドできることを確認します (詳細はこちら: 64 ビット Linux 上の 32 ビット アプリケーション) 。
  • matlab コマンド プロンプトで実行し、コンパイラとしてmex -setup選択します。gcc最後に、「mexopts.sh」の場所に関するメッセージが表示されます (通常は ~/.matlab//mexopts.sh)。
  • 「mex」してみてください。
  • 開いていない場合は、mexopts.shオプション-m32が入っているかどうかを確認してくださいCFLAGS。そうでない場合は、追加します。
于 2013-02-20T08:54:26.180 に答える