Azzera filtri
Azzera filtri

Compiler properties for building MEX-files

5 visualizzazioni (ultimi 30 giorni)
Mohamed Abdalmoaty
Mohamed Abdalmoaty il 22 Lug 2011
I'm working with MATLAB R2010b and need to compile a C++ source file to a .mex64 MEX-file.
I'm using the Microsoft VS2008 SP1 as a third party compiler.
mex.getCompilerConfigurations gives the following
mex.CompilerConfiguration
Package: mex
Properties:
Name: 'Microsoft Visual C++ 2008'
Manufacturer: 'Microsoft'
Language: 'C++'
Version: '9.0'
Location: 'C:\Program Files (x86)\Microsoft Visual Studio 9.0'
Details: [1x1 mex.CompilerConfigurationDetails]
So I think that the compiler is installed correctly. I tried to compile a simple hello.cpp file and it worked perfectly. However, my C++ source file requires the usage of MFC in a shared DLL. When I try to compile it in matlab using >>mex filenme.cpp I get the following error:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
C:\PROGRA~1\MATLAB\R2010B\BIN\MEX.PL: Error: Compile of 'filename.cpp' failed.
??? Error using ==> mex at 208
Unable to complete successfully.
How can I adjust the compiler used by MATLAB to use MFC in a Shared DLL? (as I guess that this is the problem, or?)
Thank you

Risposte (1)

Kaustubha Govind
Kaustubha Govind il 22 Lug 2011
Perhaps you should build your code in the Visual Studio IDE directly. See Custom Building MEX-Files for some tips. I would recommend get a simple MEX example to compile on the IDE (without using the MATLAB mex command), before you try your code.
Once you can compile your MEX-function on the IDE, you might want to follow generic Visual Studio steps to use the MFC. For example, this page suggests setting:
Project + Properties, General. Ensure Use of MFC is set to "Use MFC in a Shared Library".
This will ensure that all Visual Studio settings are configured for use of the MFC.
  2 Commenti
Mohamed Abdalmoaty
Mohamed Abdalmoaty il 25 Lug 2011
Thanks for your reply.
Yes I was also thinking to do that, but I wanted to give it a try first using the mex command. I think if we included #define _AFXDLL in the source file it should prevent static linking.
Eventhough I tried to use the VS 2008 SP1 to compile my file. I started a new project and set its properties as recommended in your attached link. I think the problem of the MFC lib is solved, but I still get the following errors, eventhough libmat.lib is included in the project:
1>------ Build started: Project: sfunfg, Configuration: Debug Win32 ------
1>Linking...
1> Creating library .\Debug/sfunfg.lib and object .\Debug/sfunfg.exp
1>sfunfg.obj : error LNK2019: unresolved external symbol _mxGetString_730 referenced in function "void __cdecl mdlStart(struct SimStruct_tag *)" (?mdlStart@@YAXPAUSimStruct_tag@@@Z)
1>sfunfg.obj : error LNK2019: unresolved external symbol _mxCreateDoubleMatrix_730 referenced in function "void __cdecl _ProcessMexSfunctionCmdLineCall(int,struct mxArray_tag * * const,int,struct mxArray_tag const * * const)" (?_ProcessMexSfunctionCmdLineCall@@YAXHQAPAUmxArray_tag@@HQAPBU1@@Z)
1>Debug/sfunfg.mex32 : fatal error LNK1120: 2 unresolved externals
1>Build log was saved at "file://c:\Users\Studer\Desktop\sfunfg\Debug\BuildLog.htm"
1>sfunfg - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Do you have any idea what is wrong?
Thanks
Kaustubha Govind
Kaustubha Govind il 27 Lug 2011
My best bet is that your Visual Studio project is not configured for an x64 target (by default, it is setup for a 32-bit target, and since libmat.lib, etc. are 64-bit libraries, they don't work with 32-bit projects).

Accedi per commentare.

Categorie

Scopri di più su Beamforming and Direction of Arrival Estimation in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by