11

私はMacOSX上でMathematica 8を実行しており、最も単純なプログラムでさえCにコンパイルしようとしています.Cに関係するものはすべてMathematicaでは機能しません. GCC 4.2 がインストールされています。XCodeで何度も再インストールしました。これが私がやっていることと私が得ているエラーです:

まず、常にコマンドを評価します

Needs["CCompilerDriver`"]

コンパイル ターゲットを C に設定すると、

c = Compile[ {{x}}, x^2 + Sin[x^2], CompilationTarget -> "C"];

次のようなエラーが表示されます: Compile::nogen : コンパイルされた関数からライブラリを作成できませんでした。

ライブラリを作成しようとすると、

demoFile = FileNameJoin[{$CCompilerDirectory,"SystemFiles","CSource","createDLL_demo.c"}];
lib = CreateLibrary[{demoFile},"testLibrary"]

$Failedというメッセージが表示されます。Wolfram は、これは C コンパイラがインストールされていないためだと言っています。信じられない

CCompilers[]

GCC がインストールされていることがわかります: {{"Name" -> "GCC", "Compiler" -> CCompilerDriver'GCCCompiler`GCCCompiler, "CompilerInstallation" -> "/usr/bin", "CompilerName" ->自動}}

さらに、ターミナルにはGCCもインストールされていると表示されます!! どんな助けでも大歓迎です。Mathematica を C にコンパイルしたいと思っています。

4

3 に答える 3

13

この回答では、将来の参考のために、同様の問題に対するいくつかのデバッグ手順を収集します。自由に編集/改善してください。

Mathematica 8 から C コードへのコンパイルが機能しない場合は、

  1. サポートされている C コンパイラがインストールされていて、それが動作することを確認してください(当然のことです)。

    PATHコンパイラは、少なくとも Windows/Visual Studio ではそうではないことに注意してください。

  2. Mathematica がコンパイラを認識することを確認する

    << CCompilerDriver`
    CCompilers[]
    

    Mathematica が認識しているコンパイラをリストします.

  3. 生成されたCコードをコンパイルするためにMathematica が実行するコマンドを確認してください

    Compiler`$CCompilerOptions = {"ShellCommandFunction" -> Print};
    Compile[{{x}}, x^2, CompilationTarget -> "C"];
    

    コマンドは実行されないことに注意してください。そのため、この手順が完了したら、再度コマンドを実行できるように設定し"ShellCommandFunction" -> Print直す必要があります。Compiler`$CCompilerOptions{}

  4. コンパイラからの出力/エラーを確認します。

    Compiler`$CCompilerOptions = {"ShellOutputFunction" -> Print};
    Compile[{{x}}, x^2, CompilationTarget -> "C"];
    

これらの最後の 2 つの手順で、続行するための十分な手がかりが得られることを願っています。この情報を使用して、正しいライブラリ/インクルード パスがコンパイラに渡されているかどうかを確認できます (gcc/icc の場合、-Lライブラリ パスを指定する-Iオプションとインクルード パスを指定するオプションを見てください)。次に、必要なインクルード ファイルとライブラリ ファイルがそれらのパスに存在するかどうかを確認します。

于 2011-07-01T14:46:26.093 に答える
3

Compile::nogen を取得した場合は、Compile 式で ShellOutputFunction->Print right を設定することにより、コンパイラの出力を確認できます。

c = Compile[ {{x}}, x^2 + Sin[x^2], 
   CompilationTarget -> {"C", "ShellOutputFunction"->Print}];

一般に、これは CompilationTarget->"C" を CompilationTarget->{"C", options} に変更することによって、基礎となる CreateLibrary 呼び出しにオプションを渡す方法です。Compiler`$CCompilerOptions を設定することもできますが、この手法にはグローバル変数を設定しないという利点があります。

于 2011-10-14T19:04:30.593 に答える
1

あなたが見ている唯一のエラーが$Failedであることは残念です。これはあまり役に立ちません。ファイルまたはディレクトリのパーミッションに問題があるのではないでしょうか?

MacではなくLinuxで実行しているため、セットアップが「十分に近い」かどうかわかりません。私のマシンでは、Compileコマンドが成功.Mathematica/ApplicationData/CCompilerDriver/BuildFolder/blackie-desktop-5077/compiledFunction1.soし、ホーム ディレクトリにファイルが生成されます。.MathematicaユーザーIDに関連付けられたディレクトリを見つけ、それが存在し、mathematica で書き込み可能かどうかを確認する方法はありますか?

/usr/bin/gccまた、 への呼び出しの前後のファイル アクセス時間をチェックすることで、「gcc」がアクセスされているかどうかを確認できますCompilels -lu /usr/bin/gccオペレーティングシステムのシェルから、またはおそらく Mathematica から実行できますImport["!ls -lu /usr/bin/gcc", "Text"]

于 2011-07-01T13:02:52.217 に答える