标签:
首先打开你的开始目录,找到VS2015,找到如图1所示的开发人员命令提示。打开
图1 从开始菜单打开VS的开发人员命令行
图2 打开VS2015开发人员命令提示
傻瓜式安装detour express 3.0,安装完成后,应该在你的C:\Program Files (x86)\Microsoft Research\Detours Express 3.0下有了detour的源码以及makefile等文件。注意博主是默认目录安装,如果是安装时改动过了,注意自己加以修改。
图3 detour express 3.0的根目录
然后使用cd指令,在开发人员命令行中进入到detour的根目录
cd C:\ProgramFiles (x86)\Microsoft Research\Detours Express 3.0
图4 进入到detour的根目录
可以看到图三中detour express3.0提供了makefile,也就是说可以使用vcvarsall自带的nmake命令对这个文件进行编译,从而生成静态库lib文件。这时我们使用nmake命令编译
nmake
图5 nmake命令报错
cd "C:\Program Files (x86)\Microsoft Research\Detours Express 3.0\src" cl /W4 /WX /Zi /MTd /Gy /Gm- /Zl /Od /DDETOURS_BITS=32 /DWIN32_LEAN_AND_MEAN /D_WIN32_WINNT=0x403 /Gs /DDETOURS_X86=1 /DDETOURS_32BIT=1 /D_X86_ /DDETOURS_OPTION_BITS=64 /Fd..\lib.X86\detours.pdb /Foobj.X86\detours.obj /c .\detours.cpp detours.cpp .\detours.cpp(156): error C2220: 警告被视为错误 - 没有生成“object”文件 .\detours.cpp(156): warning C4456: “pbNew”的声明隐藏了上一个本地声明 .\detours.cpp(156): note: 要简化迁移,请考虑暂时对用于生成且不引发警告的编译器版本使用 /Wv:18 标记 .\detours.cpp(147): note: 参见“pbNew”的声明 .\detours.cpp(163): warning C4456: “pbNew”的声明隐藏了上一个本地声明 .\detours.cpp(163): note: 要简化迁移,请考虑暂时对用于生成且不引发警告的编译器版本使用 /Wv:18 标记 .\detours.cpp(147): note: 参见“pbNew”的声明 .\detours.cpp(1263): warning C4456: “o”的声明隐藏了上一个本地声明 .\detours.cpp(1263): note: 要简化迁移,请考虑暂时对用于生成且不引发警告的编译器版本使用 /Wv:18 标记 .\detours.cpp(1112): note: 参见“o”的声明
然而不幸的是,呵呵哒了。编译器报错退出,但是我们可以看到,让编译器不继续编译的error C2220并不是一个标准的错误,而是一个将警告当成错误的编译行为。因为我们的源码是从ms官网download的,不应该出现错误。实际上是我们的编译器设置的问题,如果在IDE里,只需要将配置里的/WX选项去掉就可以了。
但是我们并没有打开ide,使用的是命令行工具,而nmake也没有相应的参数指令可以配置取消警告当成编译这个选项,这个时候,我们需要对detour的makefile进行修改。
图6 用记事本打开src文件夹下的makefile
打开src目录,右键点击src目录下的makefile文件,使用记事本打开,我们需要对这个进行修改。
图7 src文件夹下的makefile文件
我们直接定位到
CFLAGS=/W4 /WX /Zi /MTd /Gy /Gm- /Zl /Od /DDETOURS_BITS=$(DETOURS_BITS)
这行,把/W4改成/W3,并且去掉/WX也就是将这行变成:
CFLAGS=/W3 /Zi /MTd /Gy /Gm- /Zl /Od /DDETOURS_BITS=$(DETOURS_BITS)
图8 修改过的makefile文件
这个时候,只要在VS的命令行工具下重新执行nmake。大家最好把detour在自己的电脑里编译,因为detour工具实际上是与你电脑的环境变量挂钩的。别人编译好的dll文件你不一定能用。
但是博主发现尽管src下的源文件都成功编译了,但是sample下的文件依然报错如下图所示:
图9 发现sample里边的实例依然无法编译
博主把detour目录下的所有makefile都遍历了一遍,发现都没有/WX这个关键词出现,折腾了半天。
后来使用全文搜索发现在sample文件夹下有一个common.mak文件里边有/WX /W4这个关键字打开一看果不其然!
图10 发现罪魁祸首
图11 common.mak文件夹下的CFLAGS
这个时候只要把这行也改成相应的
CFLAGS=/nologo /Zi $(CLIB) /Gm- /W3 /Od/DDETOURS_BITS=$(DETOURS_BITS)
图12 修改过的common.mak文件
重新编译,就可以顺利完成啦!注意可能还是会报错,但是实际上并不妨碍你使用了,你需要的静态库基本都可以调用了
图13 成功生成静态库lib
Win7 64b的VS2015 如何使用nmake成功编译detour express 3.0-error2202 警告被视为错误 - 没有生成“object”文件
标签:
原文地址:http://blog.csdn.net/u013926582/article/details/51102951