Как скомпилировать Mathematica в код C с помощью компилятора Intel C ++ (x86) на Win7 (x64)? - PullRequest
1 голос
/ 22 января 2012

Моя ОС - Windows 7 64bit. Я установил Microsoft C ++ 2008 Express Edition и версию Intel C ++ Compiler v11.1 x86.

Теперь я могу успешно скомпилировать код x86 C в Mathematica, например,

    In[1]:= Needs["CCompilerDriver`"]
    In[2]:= greeter = CreateExecutable[StringJoin["#include <stdio.h>\n", "int main(){\n", "  printf(\"Hello world.\\n\");\n", "}\n"], "hiworld", 
     "Compiler" -> CCompilerDriver`IntelCompiler`IntelCompiler, 
     "CompilerInstallation" -> "C:\\Program Files (x86)\\Intel\\Compiler\\11.1\\072\\", 
     "CompilerName" -> Automatic, "TargetSystemID" -> "Windows"]

    Out[2]= "C:\\...\\AppData\\Roaming\\Mathematica\\\
       SystemFiles\\LibraryResources\\Windows-x86-64\\hiworld.exe"

Но не удалось использовать CompilationTarget -> "C" для компиляции такой функции

    In[3]:= f = Compile[{x, y}, Sqrt[x^2 + y^2], CompilationTarget -> "C"]

    During evaluation of In[3]:= LibraryFunction::libload: The function compiledFunction5 was not loaded from the file C:\\...\AppData\Roaming\Mathematica\ApplicationData\CCompilerDriver\BuildFolder\vax-5844\compiledFunction5.dll. >>
    During evaluation of In[3]:= Compile::nogen: A library could not be generated from the compiled function. >>

Полагаю, мне нужно указать значение по умолчанию "TargetSystemID"-> "Windows", поскольку моей платформой является x64, но я не знаю, как настроить такую ​​опцию в Mathematica.

Я что-то упустил здесь?

PS: я не хочу устанавливать Microsoft Visual Studio в последнее время.

1 Ответ

1 голос
/ 22 января 2012

В вашем первом кодовом блоке вы указали нужный компилятор. Во втором случае вы этого не сделали - возможно, Mathematica «не знает» о установленных вами компиляторах.

Запустите Needs["CCompilerDriver`"], а затем CCompilers[Full], чтобы узнать, о ком знает ваш Mathematica. Также, возможно, посмотрите на глобальный $CCompilerDirectory.

Если ваши компиляторы Intel и / или Microsoft не отображаются, перейдите на страницу Определенные компиляторы в Руководство пользователя CCompilerDriver . Чтобы заставить ваш компилятор Intel работать, я думаю, может быть достаточно следующего:

$CCompiler = {
 "Compiler" -> CCompilerDriver`IntelCompiler`IntelCompiler,
 "CompilerInstallation"->"C:\\Program Files (x86)\\Intel\\Compiler\\11.1\\072\\"}

Тем не менее, если я использую приведенный выше код для изменения каталога моего компилятора на что-то неправильное, то первый тип ошибки, который я получаю (до Compile::nogen), это CreateLibrary::instl, а не сообщение LibraryFunction::libload, которое вы иметь. Возможно, что-то не так с вашей директорией сборки по умолчанию: $CCompilerDefaultDirectory ...

В ответ на ваш PS компилятор Intel C ++ v11.1 для Windows включен в список протестированных ими компиляторов, поэтому вам не нужно устанавливать MS Visual Studio. С другой стороны, вы можете попробовать GCC для Windows через MiniGW или CygWin (также см. SO / 187990 ).

...