DrTimothyAldenDavis / SuiteSparse

The official SuiteSparse library: a suite of sparse matrix algorithms authored or co-authored by Tim Davis, Texas A&M University.
https://people.engr.tamu.edu/davis/suitesparse.html
Other
1.19k stars 265 forks source link

Mongoose: Define `MONGOOSE_BUILDING` when building objects for `.mex` #839

Closed mmuetzel closed 5 months ago

mmuetzel commented 5 months ago

.mex files are basically shared libraries that are loaded by Matlab.

Define MONGOOSE_BUILDING while building the object files for the .mex file.

@DrTimothyAldenDavis: Does that fix the build issues of Mongoose in Matlab on Windows?

DrTimothyAldenDavis commented 5 months ago

Here's the errors I see with the orignal, along with verbose mode turned on:

MEX completed successfully.
.Verbose mode is on.
... Looking for compiler 'Microsoft Visual C++ 2019' ...
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Enterprise -property installationPath -format value' ...No.
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Professional -property installationPath -format value' ...No.
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Community -property installationPath -format value' ...Yes ('C:\Program Files (x86)\Microsoft Visual Studio\2019\Community').
... Executing command 'set "vcroot=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community"&for /f "delims= " %a in ('type "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do @if exist "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\%a\bin\HostX64\x64\cl.exe" call echo %vcroot%' ...Yes ('C:\Program Files (x86)\Microsoft Visual Studio\2019\Community').
... Looking for registry setting 'HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0' InstallationFolder ...No.
... Looking for registry setting 'HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0' InstallationFolder ...No.
... Looking for registry setting 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0' InstallationFolder ...Yes ('C:\Program Files (x86)\Windows Kits\10\').
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Enterprise -property installationPath -format value' ...No.
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Professional -property installationPath -format value' ...No.
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Community -property installationPath -format value' ...Yes ('C:\Program Files (x86)\Microsoft Visual Studio\2019\Community').
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Enterprise -property installationPath -format value' ...No.
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Professional -property installationPath -format value' ...No.
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Community -property installationPath -format value' ...Yes ('C:\Program Files (x86)\Microsoft Visual Studio\2019\Community').
... Executing command 'set "vcroot=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community"&for /f "delims= " %a in ('type "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do @if exist "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\%a\bin\HostX64\x64\cl.exe" call echo %vcroot%\VC\Tools\MSVC\%a' ...Yes ('C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610').
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Enterprise -property installationPath -format value' ...No.
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Professional -property installationPath -format value' ...No.
... Looking for environment variable 'ProgramFiles(x86)' ...Yes ('C:\Program Files (x86)').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe' ...Yes.
... Executing command '"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[16.0,17.0)" -products Microsoft.VisualStudio.Product.Community -property installationPath -format value' ...Yes ('C:\Program Files (x86)\Microsoft Visual Studio\2019\Community').
... Looking for file 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat' ...Yes.
... Looking for folder 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build' ...Yes.
... Looking for registry setting 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots' KitsRoot10 ...Yes ('C:\Program Files (x86)\Windows Kits\10\').
... Looking for registry setting 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots' KitsRoot10 ...Yes ('C:\Program Files (x86)\Windows Kits\10\').
... Executing command 'echo off&set "sdkversion="&(for /f %a IN ('dir "C:\Program Files (x86)\Windows Kits\10\include\" /b /ad-h /on') do ( @if exist "C:\Program Files (x86)\Windows Kits\10\include\%a\ucrt\" set "sdkversion=%a" ))&call echo %sdkversion%' ...Yes ('10.0.18362.0').
Found installed compiler 'Microsoft Visual C++ 2019'.
Set PATH = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\HostX64\x64\;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\VC\vcpackages;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools;C:\Program Files (x86)\Windows Kits\10\\Bin\10.0.18362.0\x64;C:\Program Files (x86)\Windows Kits\10\\Bin\10.0.18362.0\x86;C:\Program Files (x86)\Windows Kits\10\\Bin\x64;C:\Program Files (x86)\Windows Kits\10\\Bin\x86;;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Users\davis\Documents\GitHub\GraphBLAS\build\Release;C:\Program Files\CMake\bin;C:\Program Files\MATLAB\R2023B\runtime\win64;C:\Program Files\MATLAB\R2023B\bin;C:\Users\davis\AppData\Local\Microsoft\WindowsApps;C:\Users\davis\AppData\Local\GitHubDesktop\bin;C:\Users\davis\AppData\Local\Microsoft\WindowsApps;C:\Users\davis\Documents\GitHub\GraphBLAS\GraphBLAS\build\Release;
Set INCLUDE = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\include;C:\Program Files (x86)\Windows Kits\10\\include\10.0.18362.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.18362.0\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.18362.0\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.18362.0\winrt;C:\Program Files\MATLAB\R2023B\extern\include;
Set LIB = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\lib\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\lib\x64;C:\Program Files (x86)\Windows Kits\10\\Lib\10.0.18362.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\\lib\10.0.18362.0\um\x64;C:\Program Files\MATLAB\R2023B\lib\win64;
Set LIBPATH = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\lib\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\lib\x64;
Options file details
-------------------------------------------------------------------
    Compiler location: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\
    Options file: C:\Program Files\MATLAB\R2023B\bin\win64\mexopts\msvcpp2019.xml
    CMDLINE100 : cl /c /Zc:__cplusplus /Zp8 /GR /W3 /EHs /nologo /MD /O2 /Oy- /DNDEBUG /DNTIMER  /D_FILE_OFFSET_BITS=64  /D_LARGEFILE64_SOURCE  /DGP_MEX_FUNCTION  /DMX_COMPAT_64  /DMATLAB_DEFAULT_RELEASE=R2017b  /DUSE_MEX_CMD   /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE -I"." -I"..\Include" -I"..\External\Include" -I"..\..\SuiteSparse_config"  -I"C:\Program Files\MATLAB\R2023B\extern\include" -I"C:\Program Files\MATLAB\R2023B\simulink\include" "C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp" /FoMongoose_Logger.obj
    CMDLINE200 : link /nologo /manifest  /DLL  /EXPORT:mexFunction /EXPORT:mexfilerequiredapiversion Mongoose_Logger.obj  /LIBPATH:"C:\Program Files\MATLAB\R2023B\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libMatlabDataArray.lib libMatlabEngine.lib /out:Mongoose_Logger.mexw64
    CMDLINE250 : mt -outputresource:Mongoose_Logger.mexw64;2 -manifest "Mongoose_Logger.mexw64.manifest"
    CMDLINE300 : del "Mongoose_Logger.exp" "Mongoose_Logger.lib" "Mongoose_Logger.mexw64.manifest" "Mongoose_Logger.ilk"
    COMPILER : cl
    COMPFLAGS : /Zc:__cplusplus /Zp8 /GR /W3 /EHs /nologo /MD
    COMPDEFINES : /DNTIMER  /D_FILE_OFFSET_BITS=64  /D_LARGEFILE64_SOURCE  /DGP_MEX_FUNCTION  /DMX_COMPAT_64  /DMATLAB_DEFAULT_RELEASE=R2017b  /DUSE_MEX_CMD   /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE
    MATLABMEX :  /DMATLAB_MEX_FILE
    OPTIMFLAGS : /O2 /Oy- /DNDEBUG
    INCLUDE : -I"." -I"..\Include" -I"..\External\Include" -I"..\..\SuiteSparse_config"  -I"C:\Program Files\MATLAB\R2023B\extern\include" -I"C:\Program Files\MATLAB\R2023B\simulink\include"
    DEBUGFLAGS : /Z7
    LINKER : link
    LINKFLAGS : /nologo /manifest 
    LINKTYPE : /DLL
    LINKEXPORT : /EXPORT:mexFunction
    LINKEXPORTVER : /EXPORT:mexFunction /EXPORT:mexfilerequiredapiversion
    LINKLIBS : /LIBPATH:"C:\Program Files\MATLAB\R2023B\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libMatlabDataArray.lib libMatlabEngine.lib
    LINKDEBUGFLAGS : /debug /PDB:"Mongoose_Logger.mexw64.pdb"
    LINKOPTIMFLAGS : 
    OBJEXT : .obj
    LDEXT : .mexw64
    SETENV : set COMPILER=cl
                set COMPFLAGS=/c /Zc:__cplusplus /Zp8 /GR /W3 /EHs /nologo /MD /DNTIMER  /D_FILE_OFFSET_BITS=64  /D_LARGEFILE64_SOURCE  /DGP_MEX_FUNCTION  /DMX_COMPAT_64  /DMATLAB_DEFAULT_RELEASE=R2017b  /DUSE_MEX_CMD   /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE
                set OPTIMFLAGS=/O2 /Oy- /DNDEBUG
                set DEBUGFLAGS=/Z7
                set LINKER=link
                set LINKFLAGS=/nologo /manifest  /export:%ENTRYPOINT% /DLL /LIBPATH:"C:\Program Files\MATLAB\R2023B\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libMatlabDataArray.lib libMatlabEngine.lib /EXPORT:mexFunction
                set LINKDEBUGFLAGS=/debug /PDB:"%OUTDIR%%MEX_NAME%.mexw64.pdb"
                set NAME_OUTPUT=/out:"%OUTDIR%%MEX_NAME%%MEX_EXT%"
    VCROOT : C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    SDKROOT : C:\Program Files (x86)\Windows Kits\10\
    VSINSTALLDIR : C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    VCINSTALLDIR : C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610
    VCVARSALLDIR : C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build
    KITSROOT : C:\Program Files (x86)\Windows Kits\10\
    SDKVERSION : 10.0.18362.0
    MATLABROOT : C:\Program Files\MATLAB\R2023B
    ARCH : win64
    SRC : "C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp"
    OBJ : Mongoose_Logger.obj
    OBJS : Mongoose_Logger.obj 
    SRCROOT : C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger
    DEF : C:\Users\davis\AppData\Local\Temp\mex_1524258583620099_3888\Mongoose_Logger.def
    EXP : "Mongoose_Logger.exp"
    LIB : "Mongoose_Logger.lib"
    EXE : Mongoose_Logger.mexw64
    ILK : "Mongoose_Logger.ilk"
    MANIFEST : "Mongoose_Logger.mexw64.manifest"
    TEMPNAME : Mongoose_Logger
    EXEDIR : 
    EXENAME : Mongoose_Logger
    COPTIMFLAGS : -O3 -fwrapv -std=c++11
    OPTIM : /O2 /Oy- /DNDEBUG
    LINKOPTIM : 
-------------------------------------------------------------------
Building with 'Microsoft Visual C++ 2019'.
cl /c /Zc:__cplusplus /Zp8 /GR /W3 /EHs /nologo /MD /O2 /Oy- /DNDEBUG /DNTIMER  /D_FILE_OFFSET_BITS=64  /D_LARGEFILE64_SOURCE  /DGP_MEX_FUNCTION  /DMX_COMPAT_64  /DMATLAB_DEFAULT_RELEASE=R2017b  /DUSE_MEX_CMD   /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE -I"." -I"..\Include" -I"..\External\Include" -I"..\..\SuiteSparse_config"  -I"C:\Program Files\MATLAB\R2023B\extern\include" -I"C:\Program Files\MATLAB\R2023B\simulink\include" "C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp" /FoMongoose_Logger.obj
Error using mex
Mongoose_Logger.cpp
C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp(30): warning C4273: 'debugLevel': inconsistent dll linkage
..\Include\Mongoose_Logger.hpp(106): note: see previous definition of 'private: static int Mongoose::Logger::debugLevel'
C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp(30): error C2491: 'Mongoose::Logger::debugLevel': definition of dllimport static data member not allowed
C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp(31): warning C4273: 'timingOn': inconsistent dll linkage
..\Include\Mongoose_Logger.hpp(107): note: see previous definition of 'private: static bool Mongoose::Logger::timingOn'
C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp(31): error C2491: 'Mongoose::Logger::timingOn': definition of dllimport static data member not allowed
C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp(32): warning C4273: 'clocks': inconsistent dll linkage
..\Include\Mongoose_Logger.hpp(108): note: see previous definition of 'private: static double * Mongoose::Logger::clocks'
C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp(32): error C2491: 'Mongoose::Logger::clocks': definition of dllimport static data member not allowed
C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp(33): warning C4273: 'times': inconsistent dll linkage
..\Include\Mongoose_Logger.hpp(109): note: see previous definition of 'private: static float * Mongoose::Logger::times'
C:\Users\davis\Documents\GitHub\SuiteSparse\Mongoose\Source\Mongoose_Logger.cpp(33): error C2491: 'Mongoose::Logger::times': definition of dllimport static data member not allowed
DrTimothyAldenDavis commented 5 months ago

Yes, this works, and it's a better solution than mine. I'll merge it in -- thanks!

mmuetzel commented 5 months ago

Thank you for the error message.

dllimport doesn't combine with defining a static data member. That must be a dllexport attribute instead.

This PR should fix that.