Я пытаюсь скомпилировать базовый с ++ .mex
а также .oct
файл с использованием октавной среды. .mex
файл просто mexcpp.cpp
файл из Matlab, который вы можете получить в MATLAB, используя
edit([matlabroot '/extern/examples/mex/mexcpp.cpp']);
.oct
file — простой пример c ++, найденный [здесь]. (http://www.gnu.org/software/octave/doc/interpreter/Getting-Started-with-Oct_002dFiles.html)
Я немного боролся с тем, чтобы компилятор Visual Studio настраивал все переменные среды, как описано в октава вики с помощью vcvarsall.bat. Перед настройкой переменных среды компилятора я мог выдать mkoctfile -v --mex mexcpp.cpp
Команда без ошибок, но файлы не были созданы.
Вместо этого я должен был указать среду (я использовал x86) следующим образом:
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
Теперь настоящая проблема, с которой я столкнулся, — это получить .mex
а также .oct
файлы для компиляции. Когда я пытаюсь скомпилировать файл, я получаю:
cc-msvc -d -c -D_WIN32 -DWIN32 -D__WIN32__ -IC:\Octave-3.6.2\include\octave-3.6.2\octave\.. -IC:\Octave-3.6.2\include\octave-3.6.2\octave -IC:\Octave-3.6.2\include -Ic:/Software/VC10Libs/include -Ic:/Software/VC10Libs/include/freetype2 -Ic:/Software/VC10Libs/include -Ic:/Software/VC10Libs/include -O2 -MD -EHsc -wd4244 -fp:strict -fp:except- -I. mexcpp.cpp -o mexcpp.o
cl -nologo -c -D_WIN32 -DWIN32 -D__WIN32__ -IC:\Octave-3.6.2\include\octave-3.6.2\octave\.. -IC:\Octave-3.6.2\include\octave-3.6.2\octave -IC:\Octave-3.6.2\include -Ic:/Software/VC10Libs/include -Ic:/Software/VC10Libs/include/freetype2 -Ic:/Software/VC10Libs/include -Ic:/Software/VC10Libs/include -O2 -MD -EHsc -wd4244-fp:strict -fp:except- -I. mexcpp.cpp -Fomexcpp.o mexcpp.cpp
C:\Octave-3.6.2\include\math.h(74) : fatal error C1083: Cannot open include file: 'c:/Program Files/Microsoft Visual Studio 10.0/VC/include/math.h': No such file or directory cc-msvc -d -shared -o mexcpp.mex mexcpp.o -Wl,-export:mexFunction -LC:\Octave-3.6.2\lib\octave\3.6.2 -LC:\Octave-3.6.2\lib -loctinterp -loctave -lcruft link -nologo -DLL -out:mexcpp.mex mexcpp.o -LIBPATH:C:\Octave-3.6.2\lib\octave\3.6.2 -LIBPATH:C:\Octave-3.6.2\lib octinterp.lib octave.lib cruft.lib -export:mex Function dirent.lib msvcmath.lib
LINK : fatal error LNK1181: cannot open input file 'mexcpp.o'
Мой каталог Visual C ++ находится в c:/Program Files (x86)/Microsoft Visual Studio 10.0/VC
поэтому я не уверен, почему он смотрит в c:/Program Files/Microsoft Visual Studio 10.0/VC
?
Я обнаружил, что проблема была в файле Octaves ‘math.h’. в строке 74 путь к включаемому файлу жестко c:/Program Files/Microsoft Visual Studio 10.0/VC/include/math.h
,
Я решил проблему, просто изменив c:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/include/math.h
, Я попытался скомпилировать оба .mex
и .oct
файлы и теперь они работают!
Редактировать:
С другой стороны, я заметил, что октава также включает жестко закодированные пути для некоторых визуальных студийных путей, которые не существуют.
-Ic:/Software/VC10Libs/include -Ic:/Software/VC10Libs/include/freetype2 -Ic:/Software/VC10Libs/include -Ic:/Software/VC10Libs/include
Других решений пока нет …