Inconsistent output naming of `mimalloc.dll`
After updating to v2.1.7, mimalloc-redirect.dll requires mimalloc-override.dll. While this is consistent with readme instruction, the names of the DLL objects after compiling are still mimalloc.dll and mimalloc-redirect.dll inside the build folder, which requires me to rename mimalloc.dll to mimalloc-override.dll manually. So either change back the mimalloc-redirect.dll linking to mimalloc.dll, or change mimalloc.dll output to mimalloc-override.dll.
To clarify mimalloc-override.dll requires mimalloc-redirect.dll (and your main program should have a dependency on mimalloc-override.dll.
When I look at CMakeLists.txt I see nowhere that mimalloc-override.dll is created -- that seems wrong but already it seems to have been wrong for a while? Did you have it working on an earlier version? I need to think a bit for the best fix.
Yes, but I'm not sure what changed.
I tried playing around with past release, I tested v2.1.2 and the error is like this
While the latest version (v2.1.7) is like this
I think the name has been wrong since I started using mimalloc, but it was working so I assumed it was just outdated documentation on readme section, but the issue started to appear on the latest release, that's why I filed this issue, Meanwhile I patched CMakeLists.txt with this, and the output will correctly produce mimalloc-override.dll.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bcfe91d8..67dce36f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -401,7 +401,7 @@ else()
set(mi_install_cmakedir "${CMAKE_INSTALL_LIBDIR}/cmake/mimalloc-${mi_version}") # for cmake package info
endif()
-set(mi_basename "mimalloc")
+set(mi_basename "mimalloc-override")
if(MI_SECURE)
set(mi_basename "${mi_basename}-secure")
endif()
Edit: To clarify, I used minject to import the dependencies. I don't link mimalloc when compiling the program.
Thanks for the clarification; I usually use the visual studio IDE and there we do produce the mimalloc-override.dll . I am hesitant to change things in the cmake to avoid breaking build scripts ... I'll experiment a bit more... tbc.
Hi, I'm having a similar issue where the mimalloc DLL will be called mimalloc.dll when built through CMake (by installing it with vcpkg). This happens even though I'm using the override feature of the mimalloc vcpkg port.
I'm running into the same issue using the CMake scripts on windows (so find_package(mimalloc) works correctly). My current fix is similar to AlifianK, modifying the mi_basename construction chain to support the -override postfix:
...
set(mi_basename "mimalloc")
if(MI_OVERRIDE)
set(mi_basename "${mi_basename}-override") # New addition
endif()
...
This issue is related to https://github.com/microsoft/mimalloc/issues/924, where minject doesn't support injecting the plain mimalloc.dll filename (which would be an alternate way to fix this issue).
Thanks for the feedback -- I hope to push a new release soon; However, the latest dev and dev-slice should have fixed this issue, and I also updated the bin/readme.md to be consistent. Now, on windows we always generate mimalloc.dll (and minject handles this correctly now). The static library on Windows is called mimalloc-static.lib.
It would be great if anyone could give it a test run since a new release is coming soon.
Edit:
I noticed now that minject's help message does mention what was troubling me, so this post was unecessary.
--postfix=<p> use <p> as a postfix to the mimalloc dll.
e.g. use --postfix=debug to link with mimalloc-debug.dll
I think it would be useful to make this clearer in the docs though to avoid confusion in the future.
Sorry for the unecessary message, I will leave it here though in case others have the same problem.
Original:
Hi, I wanna add to this that I am bit confused about mimalloc.dll vs mimalloc-debug.dll
Using cmake in the debug configuration, I get mimalloc-debug.dll and mimalloc-redirect.dll generated, but no mimalloc.dll
Yet when I use minject --force --inplace myapp.exe and then minject --list myapp.exe I get the following imported modules at the top of the list:
0: mimalloc-redirect.dll
1: mimalloc.dll
2: mimalloc-debug.dll
Any clarification on this? I tried both the dev2 branch as of this writing and the v3.0.1 tag, both seem to be the same in this regard.