Why do I get an errore when I try to add simulink generated shared library to visual studio? I used Shared Library Target (ert_shrlib.tlc) to generate a shared library directly. The error is: Please make sure that the file is accessible, and that it is a valid assembly or COM component.
MATLAB: I can’t import simulink generated shared library to visual studio
dllEmbedded Codershared library
Related Solutions
This change has been incorporated into the documentation in Release 2011a (R2011a). For previous releases, read below for any additional information:
This issue is caused by an incompatibility between the import libraries of different compilers.
The MATLAB Compiler generated shared library was built using the LCC compiler, while the standalone application uses the Microsoft Visual Studio .NET 2003 compiler.
There are two possible workarounds to this issue:
1. Use the same compiler to create the shared library, and to compile/link the standalone application.
2. If there is a need to use different compilers in the different stages, then compiler-specific tools can be used to generate import libraries for other compilers.
For instance, LCC provides a tool called lcc_implib.exe in the MATLABROOT\sys\lcc\bin folder, where MATLABROOT is the output of typing the following command at the MATLAB prompt:
matlabroot
This tool can generate an LCC-compatible import library for a DLL built with any compiler.
- MATLAB Compiler can generate two types of shared libraries: C shared libraries and C++ shared libraries.
web([docroot '/toolbox/compiler/f2-9676.html'])
- When using LCC compiler to compile your libraries, remember that it is a C-compiler, and it cannot compile C++:
- In order to use the MATLAB functions contained in a shared library, you need a “driver application” that initializes the MCR, etc. Search for the functions mclmcrInitialize and mclInitializeApplication in MATLAB documentation to get more information.
- When working with C++ shared libraries: Due to name mangling in C++, you must compile your driver application with the same version of your third-party compiler that you use to compile your C++ shared library in MATLAB.
web([docroot '/toolbox/compiler/f2-995712.html'])
- Both C and C++ shared libraries can be used with a driver application created in Microsoft Visual C++. The difference is that if you created a C shared library, you will need to use mxArray (pointer) as data type to access your data, whereas if you create a C++ shared library, you can access your data by using the mwArray data type.
- When compiling, the linker will need to find certain required libraries, for this you will need to add them under Project -> Properties -> Linker -> Input -> Additional dependencies:
For example: mclmcrrt.lib, mclmcr.lib, libmatrixp.lib (see included screen shot).
- If you get linking errors LNK2019, try to identify the function that cannot be resolved and see to which library it belongs, then add the library to the linker list above.
- When using Visual Studio Express Edition, the Platform SDK will need to be installed in order to be able to compile:
Microsoft Windows Server 2003 SP1 Platform SDK ISO Install
https://www.microsoft.com/en-in/download/details.aspx?id=15656
- Visual Studio Express will also require you to add additional entries to the project’s configuration, for example:
1) Project -> Properties -> C/C++ -> General -> Additional Include Directories:
C:\Microsoft Platform SDK\Include;C:\MATLAB\R2008a\extern\include;" C:\VC2005MatrixDriver8a"
2) Project -> Properties -> Linker -> General -> Additional Include Directories:
C:\Microsoft Platform SDK\Include;C:\MATLAB\R2008a\extern\include;" C:\VC2005MatrixDriver8a"
3) Project -> Properties -> Debugging:
PATH= “C:\VC2005MatrixDriver8a”;%PATH%
- When running your driver application, the application will need to be able to locate the shared library. For this, make sure that the path to the shared library has been specified under Project -> Properties -> Configuration Properties -> Debugging -> Environment (see included screen shot). Alternatively (or for deployment), you might want to copy your executable to the same folder that contains the shared library.
- The included R2008a example will run out-of-the-box if you move it to the “C:\VC2005MatrixDriver8a” folder. If you are running it from another folder, make sure you adjust all project settings and described and shown in the included screen shots. To compile the shared library, use the included COMPILECPPLIB function.
Best Answer