microsoft / mimalloc

mimalloc is a compact general purpose allocator with excellent performance.
MIT License
9.74k stars 791 forks source link

Inconsistent output naming of `mimalloc.dll` #903

Open AlifianK opened 1 month ago

AlifianK commented 1 month ago

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.

daanx commented 1 month ago

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.

AlifianK commented 1 month ago

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 image

While the latest version (v2.1.7) is like this image

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.

daanx commented 4 weeks ago

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.