您的位置:首页 > 移动开发 > Objective-C

Win7 64b的VS2015 如何使用nmake成功编译detour express 3.0-error2202 警告被视为错误 - 没有生成“object”文件

2016-04-09 01:45 1031 查看
首先打开你的开始目录,找到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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息