GCC установлен. Mathematica по-прежнему не будет компилировать C

Я запускаю Mathematica 8 на MacOSX, пытаясь скомпилировать даже простейшую программу для 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. Вольфрам говорит, что это потому, что у меня нет компилятора C. Мне трудно поверить, потому что, когда я запускаю

CCompilers[]

Это говорит мне, что у меня установлен GCC: {{ "Name" → "GCC", "Компилятор" → CCompilerDriver'GCCCompiler`GCCCompiler, "CompilerInstallation" → "/usr/bin", "CompilerName" → Automatic}}

Что еще, терминал говорит, что у меня тоже установлен GCC!! Любая помощь будет оценена по достоинству. Мне бы очень хотелось скомпилировать Mathematica в C.

Ответ 1

В этом ответе я получу некоторые шаги отладки для подобных проблем, для дальнейшего использования. Не стесняйтесь редактировать/улучшать их.

Если компиляция кода C не работает из Mathematica 8,

Эти два последних шага, надеюсь, дадут вам достаточно подсказок для продолжения. С помощью этой информации вы можете проверить, переданы ли правильные пути библиотеки/включения в компилятор (в случае gcc/icc, посмотрите на параметр -L, который указывает пути к библиотеке и параметр -I, который указывает пути включения). Затем проверьте наличие необходимых файлов include и library на этих путях.

Ответ 2

Если вы получаете Compile:: nogen, вы можете увидеть выход компилятора, установив ShellOutputFunction- > Print right в выражении Compile:

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

В общем, так вы можете передать параметры базовому вызову CreateLibrary, изменив CompilationTarget → "C" на CompilationTarget → { "C", опции}. Установка Compiler` $CCompilerOptions также работает, но этот метод имеет то преимущество, что не устанавливает глобальную переменную.

Ответ 3

Жаль, что единственная ошибка, которую вы видите, - $Failed, это не очень полезно; Интересно, есть ли проблемы с правами на файлы или каталоги?

Я работаю на linux, а не Mac, поэтому не уверен, что моя настройка "достаточно близко" или нет. На моей машине ваша команда Compile преуспевает и генерирует файл .Mathematica/ApplicationData/CCompilerDriver/BuildFolder/blackie-desktop-5077/compiledFunction1.so в моем домашнем каталоге. Есть ли способ найти каталог .Mathematica, связанный с вашим идентификатором пользователя, и посмотреть, существует ли он и можно ли его записать математикой?

Кроме того, вы можете проверить, есть ли "gcc" или нет доступа, проверяя время доступа к файлу /usr/bin/gcc до и после вашего вызова на Compile. Из оболочки операционной системы вы можете сделать ls -lu /usr/bin/gcc или из Mathematica, возможно, Import["!ls -lu /usr/bin/gcc", "Text"]