Windows VS2017下Jemalloc环境搭建失败求助
正确在Windows下编译安装Jemalloc的方法
你遇到的问题本质是用了类Unix环境的编译流程(autogen.sh)来适配VS环境,导致线程库和类型检测的兼容性问题。下面是针对VS2017的官方推荐方案,完全避开这些坑:
方法一:使用jemalloc-cmake的MSVC预配置项目(最推荐)
获取适配VS的项目文件
将专门适配VS的jemalloc-cmake仓库克隆到本地,进入仓库下的msvc目录。打开VS专属命令行
启动VS2017 x86 Native Tools Command Prompt(如果要编译64位版本,就选择对应的x64工具命令行),确保当前工作路径是刚才的msvc目录。生成VS工程文件
执行CMake命令生成适配VS2017的工程:# 编译32位版本 cmake -G "Visual Studio 15 2017" -A Win32 . # 若要编译64位版本,替换为以下命令 # cmake -G "Visual Studio 15 2017" -A x64 .编译项目
执行编译命令,指定编译配置(Release或Debug):cmake --build . --config Release编译完成后,库文件会生成在
./lib/Release(或Debug)目录下,头文件位于./include目录。
方法二:直接使用发布包中的VS2017解决方案
你下载的jemalloc发布包里已经包含了VS2017的解决方案文件,完全不需要走autogen.sh的流程:
- 在发布包中找到
jemalloc-2017.sln文件,直接用VS2017打开。 - 在VS界面顶部选择对应的平台(x86/x64)和编译配置(Release/Debug)。
- 点击「生成解决方案」,编译完成后就能在输出目录拿到对应的库文件和头文件。
为什么你之前的尝试会失败?
- pthread.h相关错误:
autogen.sh是为类Unix环境设计的编译脚本,它默认期望找到POSIX标准的pthread库,但VS环境使用的是Windows原生线程API,完全不需要额外安装第三方pthread库(你下载的pthreads-win32是给MinGW/Cygwin这类环境用的,和VS编译环境不兼容)。而jemalloc的MSVC适配分支已经针对Windows线程模型做了修改,不需要依赖pthread。 - intmax_t尺寸错误:改用Cygwin的bash执行时,configure脚本会读取Cygwin的环境变量,和VS的
cl.exe编译器环境产生冲突,导致类型检测逻辑出错,所以会报出intmax_t尺寸异常的错误。
内容的提问来源于stack exchange,提问作者lemon
相关产品推荐
相关产品推荐

