2016-10-14 7 views
1

xcodeをインストールせずにmexファイルをコンパイルしたい場合は、コマンドラインツール(apple開発者センターから)を使用します。xcodeのないMatlab mex(スタンドアロンのコマンドラインツールを使用)

Apple Command Line Toolsは、コンパイラをインストールし、xcode(数GB)よりもはるかに小さいパッケージで標準ライブラリとヘッダをシステムに追加します。

linuxでmexを実行することは可能です - 私はmatlab mexがmacosに必要な巨大なSDKを必要とする理由はありません。試行錯誤や設定ファイルをハッキングする長い夜が助けになりませんでした。 MATLABの外でmexファイルをコンパイルする方法や、xcodeをインストールせずにmexを使用する簡単な方法をコンパイルする方法については、誰でも最小限の作業例がありますか?

よろしく、マグナス

+0

私はgbをホームブリューからインストールでき、本質的にlinuxと同じコンパイラを使うと思います。私は私のマシンに両方を持っていて、matlabが両方を見ることができるかどうかを後で確認することができます。 – mpaskov

+0

実際、私はgccがMacでサポートされているとは思っていません。xcodeしか使えません。とにかくありがとうございました! – mpaskov

+0

下記のように、私は自分自身で解決策を見つけました。 – vindarmagnus

答えて

3

より多くの時間を過ごした後、私はより多くのものを学び、自分の質問に答える巻き上げます。他の誰かがそれを将来必要とするなら、私はここに私のソリューションを掲載します。

コードがコンピュータに接続され、MATLABがインストールされていることを確認し、appleからコマンドラインツールもインストールしてください。次のように端末からarrayProduct.c(MathWorks社のMATLABに付属している)をコンパイルするには、以下のmakefileを呼び出します。

make mex=arrayProduct 

お持ちの場合は、独自のニーズにメイクファイル(編集と呼ばれるファイルに同じフォルダに、このメイクファイルのコードを入れてください):

all: 
clang -c\ 
    -DMX_COMPAT_32 \ 
    -DMATLAB_MEX_FILE \ 
    -I"/Applications/MATLAB_R2016b.app/extern/include" \ 
    -I"/Applications/MATLAB_R2016b.app/simulink/include" \ 
    -fno-common \ 
    -arch x86_64 \ 
    -fexceptions \ 
    -O2 \ 
    -fwrapv \ 
    -DNDEBUG \ 
    "/Applications/MATLAB_R2016b.app/extern/version/c_mexapi_version.c" \ 
    $(mex).c 
clang \ 
    -Wl,-twolevel_namespace \ 
    -undefined error \ 
    -arch x86_64 \ 
    -bundle \ 
    -Wl,-exported_symbols_list,"/Applications/MATLAB_R2016b.app/extern/lib/maci64/mexFunction.map" \ 
    $(mex).o \ 
    c_mexapi_version.o \ 
    -O \ 
    -Wl,-exported_symbols_list,"/Applications/MATLAB_R2016b.app/extern/lib/maci64/c_exportsmexfileversion.map" \ 
    -L"/Applications/MATLAB_R2016b.app/bin/maci64" \ 
    -lmx \ 
    -lmex \ 
    -lmat \ 
    -lc++ \ 
    -o $(mex).mexmaci64 

上記のメイクファイルは、最小限の実例ですが、必要に応じて編集する必要があります。

編集: オプション2 あなたはMATLABではなく、コンパイラオプションを含むXMLファイルを編集して、コマンドラインツールを使用する方法を理解することができます。 にあるファイルを開きます/ユーザー/ユーザー名/ライブラリ/アプリケーションサポート/ MathWorks/MATLAB/R2016b/mex_C_maci64.xml

ISYSROOTに関連するすべてのコンパイラとリンカーオプションを削除します。これにより、コンパイラはXCodeのSDKフォルダではなく、/ usr/includeなどのヘッダファイルを検索します。

+0

ありがとう、ソリューション(オプション2)は私のマシンで動作します。 – Eli4ph

1

他のオプションがあります。 /Applications/MATLAB_R2016b.app/bin/maci64/mexoptsのファイルを編集します(おそらく、3.xmlファイルが必要です。すべて同じ修正が必要です)。

<XCODE_AGREED_VERSION>部分を見つけて、xmlタグ全体をコメントにします。

<!--XCODE_AGREED_VERSION> 
      <and diagnostic="Xcode is installed, but its license has not been accepted. Run Xcode and accept its license agreement." > 
       <or> 
        <cmdReturns name="defaults read com.apple.dt.Xcode IDEXcodeVersionForAgreedToGMLicense"/> 
        <cmdReturns name="defaults read /Library/Preferences/com.apple.dt.Xcode IDEXcodeVersionForAgreedToGMLicense"/> 
       </or> 
       <cmdReturns name="&#10;agreed=$$ &#10; if echo $agreed | grep -E '[\.\&quot;]' >/dev/null; then &#10; lhs=`expr &quot;$agreed&quot; : '\([0-9]*\)[\.].*'` &#10; rhs=`expr &quot;$agreed&quot; : '[0-9]*[\.]\(.*\)$'` &#10; if echo $rhs | grep -E '[\.&quot;]' >/dev/null; then &#10; rhs=`expr &quot;$rhs&quot; : '\([0-9]*\)[\.].*'` &#10; fi &#10; if [ $lhs -gt 4 ] || ([ $lhs -eq 4 ] &amp;&amp; [ $rhs -ge 3 ]); then &#10; echo $agreed &#10; else &#10; exit 1&#10; fi &#10; fi" /> 
      </and> 
     </XCODE_AGREED_VERSION --> 

いくつかの注意:このような<!---->でそれらをラップ

  1. はこれらのファイルのみデフォルトで読み込まれ、あなたはコメントアウトした後、そのディレクトリ内のsudo chmod 644 *

  2. を発行する必要がありますすべての必要なファイルは、matlabでこのコマンドを発行: mex -setup C++

これで完了しました

+0

完了、完璧に動作します! – Mapio

関連する問題