windows下 jemalloc编译
1、准备
Windows下使用VS2015进行编译,需要使用cmake构建版本。(如果有cygwin,在其中执行VS的vcvarsall.bat后使用"CC=cl ./autogen.sh"命令生成Makefile后编译也是可以的)
下载源码
git clone https://github.com/jemalloc/jemalloc-cmake.git
请确保已经安装好cmake工具。
还可以下载一个专门为win32修改的版本,支持VC6编译。
git clone https://github.com/BlzFans/jemalloc_win32.git
2、编译
分别使用VS2015和mingw编译。
VS2015编译jemalloc
方式一
直接使用VS2015打开源码目录下的msvc目录下的jemalloc_vc2015,然后进行编译即可。
使用这种方式编译的时候有很多问题。首先是VS2015不支持C11的atomic,没有stdatomic.h头文件,这需要注释掉JEMALLOC_C11ATOMICS这个宏定义。然后是大量__builtin_xxxxx函数未定义,这个可以使用自己实现的。
方式二
打开VS2015 x64本机工具命令提示符(VS2015 x64 Native Tools Command Prompt)。
进入源码目录,创建一个目录build,进入build目录后执行下面命令。
Z:\jemalloc\jemalloc-cmake\build>cmake -G"Visual Studio 14 Win64" -DCMAKE_INSTALL_PREFIX=Z:\vs140-64 ..
因为jemalloc的CMakeLists.txt文件中实际上没有写install部分(被注释掉),所以指定安装目录是无效的。
还可以直接执行CMake_configure.cmd来生成VS工程。
如果没有问题,将在build目录下生成VS工程文件。
执行下面命令进行编译(这里将只编译Release版本)
Z:\jemalloc\jemalloc-cmake\build>msbuild /p:configuration=Release /maxcpucount:8 ALL_BUILD.vcxproj
生成的目标文件在build/Release目录下。
也可以使用CygWin来生成Makefile文件,相关介绍在ReadMe.txt文件中有写。
MinGW下编译jemalloc
打开mingw命令行工具(或者msys2/cygwin等)进入源码目录,新建目录build-mingw并进入。
运行下面命令生成Makefile文件
cmake -G"MSYS Makefiles" -DCMAKE_SYSTEM_NAME=Windows ..
生成过程中遇到以下错误
错误1
-- CMAKE_C_COMPILER_ID: GNU
CMake Error at Utilities.cmake:778 (CHECK_C_COMPILER_FLAG):
Unknown CMake command "CHECK_C_COMPILER_FLAG".
Call Stack (most recent call first):
CMakeLists.txt:149 (JeCflagsAppend)
-- Configuring incomplete, errors occurred!
See also "F:/compile/jemalloc-cmake/build/CMakeFiles/CMakeOutput.log".
这个直接注释掉Utilities.cmake的778行即可。
错误2
CMake Error at Utilities.cmake:755 (message):
GetSystemPageSize failed compilation see
F:/compile/jemalloc-cmake/build/GetPageSize/getpagesize.log
Call Stack (most recent call first):
CMakeLists.txt:464 (GetSystemPageSize)
这里可以查看CMakeLists.txt的464行前后,发现是系统分页大小没有获取到的原因,这里可以直接给它设置为4096(这个可以使用下面的代码获取)
GetPageSize.c
#include <windows.h>
#include <stdio.h>
int main(int argc, const char** argv) {
int result;
#ifdef _WIN32
SYSTEM_INFO si;
GetSystemInfo(&si);
result = si.dwPageSize;
#else
result = sysconf(_SC_PAGESIZE);
#endif
printf("%d", result);
return 0;
}
使用下面命令重新生成
cmake -G"MSYS Makefiles" -DCMAKE_SYSTEM_NAME=Windows -DLG_PAGE=4096 ..
不知道是什么原因,LG_PAGE设置4096就会失败(Please wait while we configure class sizes),设置为4没有问题,不知道是不是单位的原因(Windows下分页应该是4MB)
然后使用下面命令进行构建(必须指定C_FLAGS参数,因为生成的Makefile中使用的是VC编译器的参数)
make C_FLAGS="-D_WIN32 -DWIN32 -DWIN64 -O2"
编译时出现如下错误
错误1
include/jemalloc/internal/spin.h:41:3: 错误:‘CPU_SPINWAIT’未声明(在此函数内第一次使用)
CPU_SPINWAIT;
^~~~~~~~~~~~
这个只需要修改include\jemalloc\internal\jemalloc_internal_defs.h文件的第23行。修改为
#define CPU_SPINWAIT _mm_pause()
更多类似的问题,可以通过拷贝cmake生成VS工程中的jemalloc_internal_defs.h覆盖原文件来解决。
错误2
[ 4%] Linking C shared library libjemallocso.dll
gcc: 错误:/FC:No such file or directory
gcc: 错误:/d2Zi+:No such file or directory
gcc: 错误:/Zi:No such file or directory
gcc: 错误:/FS:No such file or directory
gcc: 错误:/nologo:No such file or directory
gcc: 错误:/W3:No such file or directory
gcc: 错误:/WX:No such file or directory
gcc: 错误:/GS:No such file or directory
gcc: 错误:/Zc:wchar_t:No such file or directory
gcc: 错误:/Zc:forScope:No such file or directory
gcc: 错误:/errorReport:queue:No such file or directory
gcc: 错误:/wd4267:No such file or directory
gcc: 错误:/wd4244:No such file or directory
gcc: 错误:/wd4146:No such file or directory
gcc: 错误:/wd4334:No such file or directory
gcc: 错误:/wd4090:No such file or directory
make[2]: *** [CMakeFiles/jemallocso.dir/build.make:798:libjemallocso.dll] 错误 1
make[1]: *** [CMakeFiles/Makefile2:1510:CMakeFiles/jemallocso.dir/all] 错误 2
make: *** [Makefile:95:all] 错误 2
直接打开CMakeFiles/jemallocso.dir/build.make文件,定位到798行,将其中的/FC /d2Zi+等删除即可。其他类似的问题都可以这样解决。(包括chunk、xallocx、thread_tcache_enabled、overflow、mallocx等等,如果不想一个个解决,可以使用-k参数跳过这些工具的编译。只需要jemallocso编译出来了就可以用了)
windows下 jemalloc编译的更多相关文章
- 原创 C++应用程序在Windows下的编译、链接:第一部分 概述
本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...
- 【FFmpeg】Windows下FFmpeg编译
由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类 ...
- C++应用程序在Windows下的编译、链接(一)概述
C++应用程序在Windows下的编译.链接(一)概述 本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 c ...
- ACE在windows下的编译及配置(VS2010)
ACE在windows下的编译及配置(VS2010) 分类: -[小西南]- 2013-08-06 16:17 2354人阅读 评论( ...
- [转]QGis2.9在windows下的编译以及二次开发包下载
今天心血来潮,将QGis在github上的代码更新后,又编译了一下.留意到源代码包里面的INSTALL文件有更新,于是本次编译完全基于官方的编译说明.编译过程非常顺利,除了在CMake的第一次conf ...
- windows下rabbitmq-c编译(带openssl、无需MinGW)
因为项目原因,需要使用到rabbitmq的c客户端库.首先,参见上一篇windows下openssl编译,如果已经使用cmake编译过了,则先delete cache(File-Delete Cach ...
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)
后记: 由于自己low,没有下载罪行的python3.2导致编译上遇到种种问题,后文可以参考,建议看: <Windows7 VS2015 下编译 PythonQt3.2> https:// ...
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索
时间:2018年10月20日 笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限, ...
- 设置 Quick-Cocos2d-x 在 Windows 下的编译环境
http://cn.cocos2d-x.org/tutorial/show?id=1304 设置 Quick-Cocos2d-x 在 Windows 下的编译环境 Liao Yulei2014-08- ...
随机推荐
- MAPI错误0x80040107
MAPI错误0x80040107 的解决方案: The MAPI error means there's an "invalid entry" within the contac ...
- jpa命名规则 jpa使用sql语句 @Query
关键字方法命名sql where字句 AndfindByNameAndPwdwhere name= ? and pwd =? OrfindByNameOrSexwhere name= ? or sex ...
- 【转】你真的懂select Socket模型吗?
转自:http://www.cppblog.com/xvsdf100/archive/2013/12/10/204689.html 只要接触过c/c++网路编程人都可能会知道select io ...
- 用VS自带的打包程序打包Web程序,安装时安装中断
出现这种问题,可能是你的IIS的兼容性问题: 把IIS兼容性安装好,再试试,应该可以了.
- Sublime Text 3中SublimeLinter的使用
关于Sublime Text 2中的SublimeLinter的使用网上多如牛毛,基本上不会遇到什么问题,简单的讲一下关于Sublime Text 3中遇到的问题: 1.通过package cont ...
- WebView JS交互 addJavascriptInterface MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- centos7 开机自动连网
新安装好的CentOS7桌面版,默认的网络都是关闭的,在图形页面中,开启后,重启后网络又关闭了.下面配置开机自动连网. 工具/原料 CentOS7.2 方法/步骤 首先打开终端,用ifco ...
- Oracle数据库将varchar类型的字段改为clob类型
alter table pwlp_accuse_info modify INSTRUCTION_STYLE long; alter table pwlp_accuse_info modify INST ...
- VS2010如何生成ActiveX控件测试容器
VS2010中默认没有ActiveX控件测试容器TSTCON.exe,而是微软把这个文件放到了例子程序中,需要用户自己编译: 具体方法为: 在VS2010的安装目录中找到以下目录Samples\205 ...
- 不可不知的Python模块: collections
原文:http://www.zlovezl.cn/articles/collections-in-python/ Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想 ...