Matconvnet error cl.exe not found - matlab

I have installed MatConvNet from VLFeat and I am trying to compile it. But as I am trying to run vl_compilenn it shows the following error:
vl_compilenn
Warning: CL.EXE not found in PATH. Trying to guess out of mex setup.
> In vl_compilenn>check_clpath (line 580)
In vl_compilenn (line 413)
'cl.exe' is not recognized as an internal or external command,
operable program or batch file.
Error using vl_compilenn>check_clpath (line 591)
Unable to find cl.exe
Error in vl_compilenn (line 413)
check_clpath(); % check whether cl.exe in path

install visual studio community edition ( it's the free edition ) (minwg compiler will not work)
go to C:\Program Files (x86)\Microsoft Visual Studio
search for cl.exe
take the one appropriate for your computer architecture and copy it to the folder containing the matconvnet installation
run mex -setup c++ and set it to visual studio
and you're good to go

I have added the directory with cl.exe to my system PATH variable (you need to restart Matlab after that operation) and the compilation succeeded. The check_clpath() function was unable to find proper location of cl.exe, because it was trying to find executable in directory which does not exsist:
cl_path =
'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\bin\amd64'
after adding the cl.exe dir to PATH variable, in my case:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
the compilation succeeded.

Matlab accepts Professional Version of Visual Studio Compiler as I found out in one of the posts on MatLab forums.
The following is an easier solution,
addpath(fullfile('C:', 'Program Files (x86)', 'Microsoft Visual Studio', '2017', 'Professional', 'VC', 'Tools', 'MSVC', '14.16.27023', 'bin', 'Hostx64', 'x64'));
Matlab Post for reference:
https://se.mathworks.com/matlabcentral/answers/271382-mex-won-t-recognize-microsoft-visual-c-compilers

This worked for me
install community visual studio 2019 professional from
https://visualstudio.microsoft.com/es/downloads/
move to the directory where the installer placed visual studio. In my case
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional
locate the cl.exe appropriate to your host and target architecture (there are four combinations x86/x64). In my case x64/x64 resulted in
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.27.29110\bin\Hostx64\x64
place the path in the environmental variable in your system
within matlab, move to CF2-master\external\matconvnet\matlab and execute vl_compilenn

Unfortunately MatConvNet does not support MinGW compiler in the current version. On Windows, you need to install Microsoft Visual Studio. Nowdays you can download the community edition for free, e.g. here.
One of the reasons why MatConvNet does not support MinGW is that on windows it uses the GDI+ library to speed up reading image files. You can try to compile it using:
vl_compilenn('EnableImreadJpeg', false)

cl.exe is a C++ compiler.
This message means that the program cannot find this file on your computer (either because it is actually not there, or because you did not indicate its location.)
If you actually have a C++ compiler and work with Windows, go to the properties of your PC -> advanced settings -> Environment Variables (Sorry if the names are not accurate, my computer is in French but should be something similar...).
Here you will have a field called PATH with most probably some paths already set. Modify it by adding the path of you C++ compiler (the folder containing cl.exe) and reboot your computer (your change is not taken into account otherwise).
I do not know how to do for other OS...
Otherwise, you need to download a C++ compiler. Visual Studio is free and has one.

Related

Using libsvm on Octave (Windows)

I want to use libsvm on Octave (on a Windows platform). If I understand well from the readme file, and from a dozens of posts of the internet, I don't have to make or compile anything, only copy the mexw32 and mexw64 files to my Octave working directory. If I do this, nothing happens, the error is the same as before when I want to run my sample code:
error: `libsvmread' undefined near line 7 column 11
I've tried to run make from the Octave command prompt too, but then I got other errors:
warning: unable to find mkoctfile in expected location: `c:\Program Files (x86)\
Octave-3.6.2\bin\mkoctfile-3.6.2'
warning: mkoctfile exited with failure status
But there is a mkoctfile-3.6.2.exe at the given directory...
I have already tried to edit the octaverc file too...but it didn't help.
Any ideas how to install libsvm correctly?
According to the README file in the matlab subfolder of the LIBSVM distribution (I looked at 3.13), the included binaries are only for the 64-bit version of Matlab on Windows. These binaries definitely did not work with my version of Octave on Windows! To get LIBSVM to work with Octave, we will have to build Octave-specific .mex files and put them somewhere Octave can find them.
I put together a walkthrough of the process at http://flyingpies.wordpress.com/2012/11/20/getting-libsvm-to-work-with-octave-on-windows/. In a nutshell, the steps are:
Make sure you have the Windows version of Octave built with Visual Studio (i.e. not the cygwin or mingw one.) I'm certain comparable steps can be taken with these other versions, by I didn't try them out.
Get a copy of Visual Studio 2010 or 2012. Either worked fine for me. You just need the command line C compiler and linker out of that big package. The express version of VS is available for free from Microsoft, though I didn't try that out.
In a command prompt window, run the vcvarsall.bat batch file from the Visual C folder of Visual Studio, to prime your environment for compilation.
Add the Octave bin folder to your path (C:\Program Files (x86)\Octave-3.6.2\bin on my machine). This addresses the 'cannot find mkoctfile' problem you encountered.
Edit Octave's math.h include file to reference the correct location of Visual Studio's math.h. I had to change line 74 of c:\Program Files (x86)\Octave-3.6.2\include\math.h from c:/Program Files/Microsoft Visual Studio 10.0/VC/include/math.h to c:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/math.h.
In the same command prompt window primed with vcvarsall and the path, start Octave, navigate to the matlab subfolder of the LIBSVM distribution, and run the make command. This executes the make.m file in that folder, which will build the .mex files.
Copy the .mex files to a folder where Octave can find them. I put them in C:\Program Files (x86)\Octave-3.6.2\lib\octave\3.6.2\site\oct\i686-pc-mingw32.
At this point, if you start Octave, LIBSVM interface commands should be available. For example, the svmtrain command should run.

Matlab deployement tool, Microsoft compiler

I'd like to know which specific file is my Microsoft compiler. I need it to compile some Matlab code. By running mex -setup mex is able to locate the compiler in the following directory : d:\Program Files (x86)\Microsoft Visual Studio 10.0 However when I browse there, there is no file that would possibly be the actual compiler.
I'd like to build my application, but it won't work, looks like Matlab indeed found the compiler, but I get an error (code = 53) An error occurred while shelling out to mbuild
So my guess then was that I had to go in the Deployement tool Settings and add some options like the compiler directory (even if I already set it with mex), but I can't find it in d:\Program Files (x86)\Microsoft Visual Studio 10.0 I don't even know what's the compiler's name.
I really need help on this one. Thanks!
For mex -setup to work correctly you don't need to know what the actual compiler is called. When I run mex -setup I get a list like this:
Select a compiler:
[1] Intel C++ 12.0 (with Microsoft Visual C++ 2010 linker) in C:\Program Files (x86)\Intel\ComposerXE-2011
[2] Intel Visual Fortran 12.0 (with Microsoft Visual C++ 2010 linker) in C:\Program Files (x86)\Intel\ComposerXE-2011
[3] Microsoft Visual C++ 2010 in C:\Program Files (x86)\Microsoft Visual Studio 10.0
[0] None
and if I select [3] the informative output includes the lines
Trying to update options file: D:\Users\my.name\AppData\Roaming\MathWorks\MATLAB\R2012a\mexopts.bat
From template: C:\PROGRA~1\MATLAB\R2012a\bin\win64\mexopts\msvc100opts.bat
If you inspect either of those files you will find the name of the compiler (it's called cl.exe and there are a few different versions in directories below the one that Matlab suggests it is looking in) assigned to be the value of a script variable called COMPILER. You'll also find all the settings that mex uses when it compiles code into a mex-file. You may be able to diagnose the rest of your problem(s) from this information.
If you can't solve your problem(s) with this 'help', edit it and explain precisely the error messages and

No C compiler on matlab using mex, any simple compilers/solutions?

I've been crazy on these things all day...
I installed the Matlab2010a on remote desktop (64bits windows server 2008)
then I need to use the "mex" command to recompile the code (which is already compiled at my laptop(64-bits), but it doesn't work when I copy the .mexw64 to the remote one)
But on the remote desktop, there is no Visual Studio/VC6.0. And you know it's tooooo hard and not workable to install something like that on the remote desktop...
So, are there any other solutions for me to compile the .cpp on matlab?
Thank you so much, because I've been drived crazy...Jesus...
Try the following to see what compiler is available
mex
Select a compiler:
[1] Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2012a\sys\lcc
[2] Microsoft Visual C++ 2010 in C:\Program Files (x86)\Microsoft Visual Studio 10.0
The output shows that my MATLAB may use one of these two compilers to create mex files.
If I want to set up my another compiler, I have to use the following command
mex -setup

Compiling MEX files in Matlab 32bit running on Windows 64bit

What is the right setup to do this?
Currently when I enter mex -setup, the compiler list is empty.
I installed Visual C++ Express 2008 and Windows SDK, but the supported compilers list is still empty.
You need to manually configure the mexopts.bat file, so that your compiler is identified by the mex command. Here there is an example mexopts.bat file: http://www.playrec.co.uk/download/mexopts.bat - be sure to edit it to fit your system settings (path etc.). Also, you should put this file in the current folder when you compile the code, otherwise Matlab will use its default file.

Matlab deploy tool- Windows stand alone application

I am trying to create a Windows stand alone application in Matlab using the Deploytool to produce a .exe file for my project. (as mentioned here: http://www.mathworks.co.uk/products/demos/compiler/deploytool/index.html).
The problem is when in the Deploytool I add my files and press the Build button it asks me to use mbuild -setup to setup my compiler. When I do so the only options I get are :
Would you like mbuild to locate installed compilers [y]/n? n
Select a compiler:
[1] Microsoft Visual C++ 2005 SP1
[2] Microsoft Visual C++ 2008 Express
[3] Microsoft Visual C++ 2008 SP1
[0] None
and when I choose any I get these:
*The default location for Microsoft Visual C++ 2008 Express compilers is C:\Program Files (x86)\Microsoft Visual Studio 9.0,
but that directory does not exist on this machine.
Please enter the location of your compiler:*
I also get the following error when I build:
*Could not find the compiler "cl" on the DOS path.
Use mbuild -setup to configure your environment properly.
C:\PROGRA~1\MATLAB\R2010A\BIN\MEX.PL: Error: Unable to locate compiler.
Error: An error occurred while shelling out to mbuild (error code = 2).
Unable to build executable.*
Can you please help me solve this problem.
Thanks in advance.
You need to allow mbuild to detect installed compilers. The Matlab compiler includes a default C compiler. On my Windows XP system, I get:
>> mbuild -setup
Welcome to mbuild -setup. This utility will help you set up
a default compiler. For a list of supported compilers, see
http://www.mathworks.com/support/compilers/R2011a/win32.html
Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n? y
Select a compiler:
[1] Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2011a\sys\lcc
[2] Microsoft Visual C++ 2010 in C:\Program Files\Microsoft Visual Studio 10.0
[3] Microsoft Visual C++ 2005 SP1 in C:\Program Files\Microsoft Visual Studio 8
[0] None
Compiler:
I have two versions of Visual Studio installed, but you can see the default compiler is in the MATLAB installation directory.
Ensure you answer 'y' when the script asks to locate installed compilers
You need to have a compiler installed on your computer. You can download Visual Studio Express from here: Visual Studio Express Download.
I installed Microsoft Visual Studio Ultimate on my computer. When asked for the location of the compiler in mbuild setup, I redirected it to C:\Program Files (x86)\Microsoft Visual Studio 10.0. This worked for me.
Go to following address {C:\Program Files\MATLAB\R2008a\toolbox\compiler\deploy\win32 }
and install this following setup - "MCRInstaller.exe" (This setup file is use for set run time compiler) after install you can use "deployment tool" your respective file like *.Project.
Enjoy...