Starting with Aimms-24.1.8.2-x64-VS2022.exe, the installation no longer seems to include the libaimms3.lib import library, while earlier versions did.
I could not find any release notes, documentation, or blog posts explaining this change. Could you clarify:
Whether the removal of libaimms3.lib from the installer is intentional
What the recommended approach is for linking against the AIMMS API in 24.x and later (e.g., dynamic loading, generating the import library, or obtaining it separately)
Any guidance or references to official documentation would be appreciated.
Best answer by MarcelRoelofs
Hi @SummerBlue
Starting with AIMMS 24, we moved over to a completely new build system called conan, and the creation of the IFA somehow went awry wrt the inclusion of libaimms3.lib. We didn't notice it ourselves before, because we link against AIMMS using the conan packages being created during the AIMMS build directly. We will fix it for upcoming releases.
In the meantime, it is fairly easy to create an import library yourself, using the following batch file:
REM Usage: dll2lib [32|64] some-file.dll REM REM Generates some-file.lib from some-file.dll, making an intermediate REM some-file.def from the results of dumpbin /exports some-file.dll. REM Currently must run without path on DLL. REM (Fix by removing path when of lib_name for LIBRARY line below?) REM REM Requires 'dumpbin' and 'lib' in PATH - run from VS developer prompt. REM REM Script inspired by http://stackoverflow.com/questions/9946322/how-to-generate-an-import-library-lib-file-from-a-dll @echo off
SETLOCAL if "%1"=="32" (set machine=x86) else (set machine=x64) set dll_file=%2 set dll_file_no_ext=%dll_file:~0,-4% set exports_file=%dll_file_no_ext%-exports.txt set def_file=%dll_file_no_ext%.def set lib_file=%dll_file_no_ext%.lib set lib_name=%dll_file_no_ext%
dumpbin /exports %dll_file% > %exports_file%
echo LIBRARY %lib_name% > %def_file% echo EXPORTS >> %def_file% for /f "skip=19 tokens=1,4" %%A in (%exports_file%) do if NOT "%%B" == "" (echo %%B @%%A >> %def_file%)
Starting with AIMMS 24, we moved over to a completely new build system called conan, and the creation of the IFA somehow went awry wrt the inclusion of libaimms3.lib. We didn't notice it ourselves before, because we link against AIMMS using the conan packages being created during the AIMMS build directly. We will fix it for upcoming releases.
In the meantime, it is fairly easy to create an import library yourself, using the following batch file:
REM Usage: dll2lib [32|64] some-file.dll REM REM Generates some-file.lib from some-file.dll, making an intermediate REM some-file.def from the results of dumpbin /exports some-file.dll. REM Currently must run without path on DLL. REM (Fix by removing path when of lib_name for LIBRARY line below?) REM REM Requires 'dumpbin' and 'lib' in PATH - run from VS developer prompt. REM REM Script inspired by http://stackoverflow.com/questions/9946322/how-to-generate-an-import-library-lib-file-from-a-dll @echo off
SETLOCAL if "%1"=="32" (set machine=x86) else (set machine=x64) set dll_file=%2 set dll_file_no_ext=%dll_file:~0,-4% set exports_file=%dll_file_no_ext%-exports.txt set def_file=%dll_file_no_ext%.def set lib_file=%dll_file_no_ext%.lib set lib_name=%dll_file_no_ext%
dumpbin /exports %dll_file% > %exports_file%
echo LIBRARY %lib_name% > %def_file% echo EXPORTS >> %def_file% for /f "skip=19 tokens=1,4" %%A in (%exports_file%) do if NOT "%%B" == "" (echo %%B @%%A >> %def_file%)