vs2010下使用nmake编译库的注意事项

1.要想vs2010客户端程序能够断点调试到库的代码中,编译之前,在库的Makefile文件中CFLAG选项中加入(-Z7,-Zi,-ZI),使编译好的二进制文件中带有调试信息。

例如:CFLAG=/Ox /W3 /wd4996 /nologo /Z7


知识点:1.

为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的 Configuration中增加调试信息,包括Release版本。
为了增加调试信息,可以按照下述步骤进行:

a 打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开)

b 选择C/C++页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试信息方式包括:
None:
没有调试信息
Line Numbers Only:
目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息
C7 Compatible:
目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型.函数及原型 等
Program Database:
创建一个程序库(PDB),包括类型信息和符号调试信息。
Program Database for Edit and Continue:
除了上面的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。
这个选项同时使#pragma设置的优化功能无效

c 选择Link页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL .如果C/C++页中设置了Program Database以上的选项,则Link incrementally可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),而不必每次都从头开始编译。

知识点:2.

如果不想看到太多的警告,加入禁止警告选项wd4244 /wd4996 /wd4018


知识点:3.

张老师问你几个问题:ws2_32.lib wsock32.lib 这两个库有什么差别。我用了 ws2_32.lib  这一个库,就能链接成功。
还有,为什么要忽略 libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib 这些库呢?是什么原因。

wsock32.lib 是winsock1.0的库文件,ws2_32.lib 是winsock2.0的库文件,如果你只用winsock2,只要ws2_32.lib就可以了。

我们使用的是静态链接库多线程 (libcmt.lib),这样将一个httpd.exe文件拷贝到别的电脑上也能运行,不需要msvcrt.lib(msvcm80.dll、msvcp80.dll、msvcr80.dl)l等动态链接库的支持。libcmt.lib会和msvcrt.lib发生冲突,需要二者选其一。所以,按照微软MSDN上“链接器工具警告 LNK4098”的说明,忽略了这些库:


知识点:4.

Libevent 最新的 2.0.10 版本已经支持了Windows 的 IOCP 网络模型。只不过 evhttp 部分还用的是 select。



©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页