引用 23 楼 nooning 的回复: 这由多方面决定的: 如果不使用API HOOK DEBUG与RELEASE 只差性能,可以混用 但ANSI 与 UNICODE不能混用 最简单的例子,在release 的编译选项用 /MDd 在DEBUG里选 /MD 连接到mfc42.dll 还是mfc42d.dll 或mfcs42.dll都不会影响功能 但如果你ANSI版连接到mfc42u.dll那就等着出错吧,只要使用了ansi版函数 另一个就是如果使用hook,那么函数的行为会不一样,函数入口是一条jmp 说白了,DEBUG RELEASE 就是编译选项不一样,如果能导致等为不一样,那微软要关门 其它的区别仅限于,大小,生成的地址,而lib里不包括生成地址,只包括名称(静态库还有完整实现,但不连接) 如这位兄弟意思,也就是lib文件不管是动态库还是静态库,只要不是ANSI和UNICODE混用,是没多少区别的,是吗?
这由多方面决定的: 如果不使用API HOOK DEBUG与RELEASE 只差性能,可以混用 但ANSI 与 UNICODE不能混用 最简单的例子,在release 的编译选项用 /MDd 在DEBUG里选 /MD 连接到mfc42.dll 还是mfc42d.dll 或mfcs42.dll都不会影响功能 但如果你ANSI版连接到mfc42u.dll那就等着出错吧,只要使用了ansi版函数 另一个就是如果使用hook,那么函数的行为会不一样,函数入口是一条jmp 说白了,DEBUG RELEASE 就是编译选项不一样,如果能导致等为不一样,那微软要关门 其它的区别仅限于,大小,生成的地址,而lib里不包括生成地址,只包括名称(静态库还有完整实现,但不连接)
zhouzhipen,不要自以为是。----在VS的默认情况下,release和debug的lib是不一样的,debug带有调试信息,但Release不带,最明显的是文件的大小不一样。 不过确实可以通过设置使debug和release版的lib几乎完全一样(但不包括时间戳等)。
引用 3 楼 wizardk 的回复: 有区别,你可以试试,隐式调用使用DEBUG的LIB,运行时使用RELEASE的DLL,或者反之,这个叫做“DLL Hell” 了解一下DLL和LIB是什么,你就能想象版本混用的后果了: 1.DLL是一个完整的可执行程序,已链接,即不存在同名引用,且有导出表,与导入表LIB是一个代码集(也叫函数集) 2.伴随DLL的生成而产生的LIB实际上不是真正的函数集,其每一个导出导入函数都是跳转指令,直接跳转到DLL中的位置,这个目的是外面的程序调用DLL时自动跳转 形象的比喻下,你去九寨沟旅游,结果请了一个武当山的导游。。。 很感谢你的解答。 对于其他人跟你的争论,可以打一个比方。 你在钓鱼,旁边有人跟你说话,你说不能说话,会钓不到鱼的。于是他们想:丫神经病啊,说话也是坐着钓,不说话也是坐着钓,怎么可能钓不到。 这则比方告诉我们,不懂就要谦虚。不懂的可以问,但是不要自以为是,误导他人。
有区别,你可以试试,隐式调用使用DEBUG的LIB,运行时使用RELEASE的DLL,或者反之,这个叫做“DLL Hell” 了解一下DLL和LIB是什么,你就能想象版本混用的后果了: 1.DLL是一个完整的可执行程序,已链接,即不存在同名引用,且有导出表,与导入表LIB是一个代码集(也叫函数集) 2.伴随DLL的生成而产生的LIB实际上不是真正的函数集,其每一个导出导入函数都是跳转指令,直接跳转到DLL中的位置,这个目的是外面的程序调用DLL时自动跳转 形象的比喻下,你去九寨沟旅游,结果请了一个武当山的导游。。。
15,471
社区成员
49,182
社区内容
加载中
试试用AI创作助手写篇文章吧