Windows下Hyperscan使用__aligned_malloc出现LNK2019链接错误求助
解决Hyperscan与DMD链接时__imp__aligned_malloc未找到的问题
问题根源
CMake阶段检测到_aligned_malloc是因为VS编译器能找到该函数(属于MSVC运行时库),但DMD默认链接的运行时库与Hyperscan构建时依赖的MSVC运行时不匹配,导致链接器无法找到动态导入符号__imp__aligned_malloc。
解决方案
1. 让DMD链接对应的MSVC运行时导入库
Hyperscan在VS2017下构建时默认依赖MSVC 2017的动态运行时(vcruntime140.dll),你需要在DMD编译命令中显式链接对应的导入库:
dmd your_program.d hs.lib "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x64\vcruntime140.lib"
注意替换路径为你本地VS2017的实际安装路径;若Hyperscan是Debug构建,需使用vcruntime140d.lib。
2. 静态构建Hyperscan(避免依赖动态运行时)
如果不想手动链接MSVC库,可以在CMake构建Hyperscan时指定静态链接MSVC运行时:
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded ..\
Debug版本则用:
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug ..\
重新构建Hyperscan后,生成的hs.lib会将MSVC运行时静态嵌入,此时DMD编译时只需链接hs.lib即可,无需额外运行时库。
3. 确认架构匹配
确保你使用的是64位DMD(对应Win64版本的Hyperscan),32位DMD无法链接64位的hs.lib,也会触发类似符号未找到的错误。
内容的提问来源于stack exchange,提问作者backtrack
相关产品推荐
相关产品推荐

