2012-10-02 19 views
4

我正在嘗試使用八度環境編譯基本的C++ .mex.oct文件。該.mex文件是從MATLAB只是mexcpp.cpp文件,你可以在MATLAB使用使用帶有Octave和Visual Studio 2010的mkoctfile編譯.mex或.oct文件編譯器

edit([matlabroot '/extern/examples/mex/mexcpp.cpp']); 

.oct文件是簡單的C++例子中找到[這裏]獲得。(http://www.gnu.org/software/ octave/doc/interpreter/Getting-Started-with-Oct_002dFiles.html)

我努力了一下,讓visual studio編譯器設置了所有環境變量,如octave wiki using 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

回答

4

我發現問題出在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文件,他們現在工作!

編輯:

在另一方面,我注意到倍頻也包括對不存在的某些Visual Studio的路徑硬編碼路徑。

-Ic:/Software/VC10Libs/include -Ic:/Software/VC10Libs/include/freetype2 -Ic:/Software/VC10Libs/include -Ic:/Software/VC10Libs/include