如何使自己维护的lib/dll不再需要区分debug与release?

时间:2022-12-15 21:43:05
我们在用vc++写软件的时候一般都会为不同的dll proj配置生成不同的_ud/_u的lib和dll,在其他工程中引用的时候通过编译选项在链接不同的lib,大家都是这样做的。
我的问题是如果debug与release需要区分,32与64也需要区分,那我们需要维护四个lib,感觉debug与release的能否合并呢?难道只能是纯c的吗?

我看到一些商业的lib/dll只有release的,在自己工程中debug/release的时候用也没有问题,但是自己写的lib反而不行。不知道是哪里的问题导致的。

如果我假定现在有个lib的代码很稳定,也不存在兼容性问题,debug/release能否合并成一个,有什么约束条件?合并完之后还要保证编译、运行没有问题。

73 个解决方案

#1


商业的lib/dll只有release的 是不想让你 debug

#2


release  即可。

#3


引用 1 楼 schlafenhamster 的回复:
商业的lib/dll只有release的 是不想让你 debug


自己做个例子,一个dll(随便导出一个函数或类),一个exe,在exe的debug状态引用dll的release库,看看报什么错误 。

#4


引用 2 楼 smwhotjay 的回复:
release  即可。

自己做个例子,一个dll(随便导出一个函数或类),一个exe,在exe的debug状态引用dll的release库,看看报什么错误 。

#5


回答之前可以看一下这个链接,
http://blog.csdn.net/qq_28098067/article/details/51385394

#6


debug与release需要区分 是因为 里面的代码都不一样。

#7


dll有好几种方式,如果你dll改用导出函数的方式,那你就不用区分release还是debug,
如果用导出类的方式,那必须区分,我的做法是每个工程分好几种编译方式,分别对应不同的dll和lib
32位:
1.x86_Debug
2.x86_Debugu
3.x86_Release
4.x86_Releaseu

64位:
1.x64_Debug
2.x64_Debugu
3.x64_Release
4.x64_Releaseu

#8


引用 7 楼 jason_wentzel 的回复:
dll有好几种方式,如果你dll改用导出函数的方式,那你就不用区分release还是debug,
如果用导出类的方式,那必须区分,我的做法是每个工程分好几种编译方式,分别对应不同的dll和lib
32位:
1.x86_Debug
2.x86_Debugu
3.x86_Release
4.x86_Releaseu

64位:
1.x64_Debug
2.x64_Debugu
3.x64_Release
4.x64_Releaseu

我还没玩过64位的。。。一直默认32位 exe dll

#9


debug与release有区别, 是因它他们的设置不同, 如果你把debug与release的设置全部设置成相同, 那它们就没有区别了.

对外一般都只提供release版本的.   
如果没有特殊需求, 只提供一个32位版本应该也就够了.  特殊需求的情况, 可能会区分32位与64位版本.

#10


引用 9 楼 xiaohuh421 的回复:
debug与release有区别, 是因它他们的设置不同, 如果你把debug与release的设置全部设置成相同, 那它们就没有区别了.

对外一般都只提供release版本的.   
如果没有特殊需求, 只提供一个32位版本应该也就够了.  特殊需求的情况, 可能会区分32位与64位版本.


现在软件提供商提供的开发包只有release版本的lib/dll.我们在开发的时候debug与release都能用这个库,而我们自己开发维护的lib/dll却不行,搞不明白为什么,差在哪里?都是lib/dll为什么啊?

#11


引用 7 楼 jason_wentzel 的回复:
dll有好几种方式,如果你dll改用导出函数的方式,那你就不用区分release还是debug,
如果用导出类的方式,那必须区分,我的做法是每个工程分好几种编译方式,分别对应不同的dll和lib
32位:
1.x86_Debug
2.x86_Debugu
3.x86_Release
4.x86_Releaseu

64位:
1.x64_Debug
2.x64_Debugu
3.x64_Release
4.x64_Releaseu


我现在也是这么做,但是现在软件提供商提供的开发包只有release版本的lib/dll.我们在开发的时候debug与release都能用这个库,也没有问题,搞不明白为什么,差在哪里?都是lib/dll为什么啊?谁愿意维护那么多个版本啊?我觉得肯定有方法。

#12


引用 11 楼 jzp_1981 的回复:
Quote: 引用 7 楼 jason_wentzel 的回复:

dll有好几种方式,如果你dll改用导出函数的方式,那你就不用区分release还是debug,
如果用导出类的方式,那必须区分,我的做法是每个工程分好几种编译方式,分别对应不同的dll和lib
32位:
1.x86_Debug
2.x86_Debugu
3.x86_Release
4.x86_Releaseu

64位:
1.x64_Debug
2.x64_Debugu
3.x64_Release
4.x64_Releaseu


我现在也是这么做,但是现在软件提供商提供的开发包只有release版本的lib/dll.我们在开发的时候debug与release都能用这个库,也没有问题,搞不明白为什么,差在哪里?都是lib/dll为什么啊?谁愿意维护那么多个版本啊?我觉得肯定有方法。

发布的时候,一般是Release,使用的时候,也都是Debug Release混用,但是有时候还是可能会触发一些不可预知的问题。
所以如果可以的话,当然是对应版本的发布就好了。一般对于这么多版本,都可以用编译脚本来处理。这样就不需要人工处理了。

#13


肯定是可以的啊, 
你说不行的时候, 是报什么错呢?

#14


如何使自己维护的lib/dll不再需要区分debug与release?

#15


谢谢分享哦~~~

#16


不懂  但是帮顶啊 2333

#17


不懂  但是帮顶啊 2333 

#18


非常不错。非常好。

#19


新手报到,学到了不少东西啊

#20


我们在用vc++写软件的时候一般都会为不同的dll proj配置生成不同的_ud/_u的lib和dll,在其他工程中引用的时候通过编译选项在链接不同的lib,大家都是这样做的。

#21


我来学习的.

#22


我是来赚取积分的

#23


learning~

#24


内容不错 ~学习中~

#25


同来学习下,非常感谢分享!

#26


  前来学习 内容可以·

#27


如何使自己维护的lib/dll不再需要区分debug与release?

#28


貌似 http://blog.csdn.net/qq_28098067/article/details/51385394 里面有答案。

#29


learning~

#30


引用 11 楼 jzp_1981 的回复:
我现在也是这么做,但是现在软件提供商提供的开发包只有release版本的lib/dll.我们在开发的时候debug与release都能用这个库,也没有问题,搞不明白为什么,差在哪里?都是lib/dll为什么啊?谁愿意维护那么多个版本啊?我觉得肯定有方法。


debug、release 区别在于编译器对代码编译后的二进制进行优化。debug版本编译的产品是没有对代码进行“优化的”你代码写的每一行代码都完完全全的按照你写的逻辑生成二进制汇编。这样子的话是方便程序员对自己产品进行“调试”

release生成的二进制代码后还会对你编译器的“优化配置”选项按照里面所配置的优化模式进行二进制级别的代码优化,简单来说就是移除多余的遍历。分支优化,合并变量,变量由寄存器代替使用。 内联函数的整理。等等等等。详细就去看看龙书相关的知识吧。

#31


楼主发在mfc板块那么也是用vs系列的编译器了。难道楼主就没有过编译release版本在不修改任何编译配置的情况下来进行调试吗?你会发现你监视窗口里面再也不能“监视”每行返回吧的变量了。而且单步的逻辑也会不太对。

release和debug最大区别就是配置选项里面的“优化”项。 你把优化禁用掉就跟DEBUG没什么区别。当然链接的库不算。

#32


存在即合理。

#33


release只在发布的时候用一下就好了。只要你的代码里不固定某些的大小,都不会有问题。

#34


路过 路过  路过 路过

#35


该回复于2017-10-13 17:54:55被管理员删除

#36



下回还是说这种话中

#37


learning~

#38


学习赚积分,谢谢学哥指点交流

#39


哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

#40


如何使自己维护的lib/dll不再需要区分debug与release?

#41


学习了。谢谢分享。

#42


自己写的dll也可以只用release版
exe在debug或release下,都只用release版的dll是可以的
当然这对代码是有要求的,假如你的exe和dll传递的一个结构体,在debug和release下的定义不同,那么就会出问题
具体问题具体分析,你的debug模式的exe使用release版的dll出什么错?

#43


谢谢 有用 帮大忙了

#44


自己写的dll也可以只用release版

#45


自己写的dll也可以只用release版s

#46


不用维护debug,输出release即可

#47


没办法,人生就是这么无奈,很多时候就是跟这些无聊的东西在打交道。

你说操作系统都用win10多好了,非得有人用xp. vista  win7 win8 win8.1。 然后你写出的程序要在这些个操作系统上一个一个地试一遍。还要区分32 64位

#48


如何使自己维护的lib/dll不再需要区分debug与release?如何使自己维护的lib/dll不再需要区分debug与release?如何使自己维护的lib/dll不再需要区分debug与release?

#49


总结的很全,好帖子

#50


引用 47 楼 wh_2396 的回复:
没办法,人生就是这么无奈,很多时候就是跟这些无聊的东西在打交道。

你说操作系统都用win10多好了,非得有人用xp. vista  win7 win8 win8.1。 然后你写出的程序要在这些个操作系统上一个一个地试一遍。还要区分32 64位


这还真没辙,公司有些部门就全员标配各种忒旧的电脑,就只能跑xp,因为这些部门的成员平时很少用电脑,够用了所以也没得换。没更古老的系统就不错了

#1


商业的lib/dll只有release的 是不想让你 debug

#2


release  即可。

#3


引用 1 楼 schlafenhamster 的回复:
商业的lib/dll只有release的 是不想让你 debug


自己做个例子,一个dll(随便导出一个函数或类),一个exe,在exe的debug状态引用dll的release库,看看报什么错误 。

#4


引用 2 楼 smwhotjay 的回复:
release  即可。

自己做个例子,一个dll(随便导出一个函数或类),一个exe,在exe的debug状态引用dll的release库,看看报什么错误 。

#5


回答之前可以看一下这个链接,
http://blog.csdn.net/qq_28098067/article/details/51385394

#6


debug与release需要区分 是因为 里面的代码都不一样。

#7


dll有好几种方式,如果你dll改用导出函数的方式,那你就不用区分release还是debug,
如果用导出类的方式,那必须区分,我的做法是每个工程分好几种编译方式,分别对应不同的dll和lib
32位:
1.x86_Debug
2.x86_Debugu
3.x86_Release
4.x86_Releaseu

64位:
1.x64_Debug
2.x64_Debugu
3.x64_Release
4.x64_Releaseu

#8


引用 7 楼 jason_wentzel 的回复:
dll有好几种方式,如果你dll改用导出函数的方式,那你就不用区分release还是debug,
如果用导出类的方式,那必须区分,我的做法是每个工程分好几种编译方式,分别对应不同的dll和lib
32位:
1.x86_Debug
2.x86_Debugu
3.x86_Release
4.x86_Releaseu

64位:
1.x64_Debug
2.x64_Debugu
3.x64_Release
4.x64_Releaseu

我还没玩过64位的。。。一直默认32位 exe dll

#9


debug与release有区别, 是因它他们的设置不同, 如果你把debug与release的设置全部设置成相同, 那它们就没有区别了.

对外一般都只提供release版本的.   
如果没有特殊需求, 只提供一个32位版本应该也就够了.  特殊需求的情况, 可能会区分32位与64位版本.

#10


引用 9 楼 xiaohuh421 的回复:
debug与release有区别, 是因它他们的设置不同, 如果你把debug与release的设置全部设置成相同, 那它们就没有区别了.

对外一般都只提供release版本的.   
如果没有特殊需求, 只提供一个32位版本应该也就够了.  特殊需求的情况, 可能会区分32位与64位版本.


现在软件提供商提供的开发包只有release版本的lib/dll.我们在开发的时候debug与release都能用这个库,而我们自己开发维护的lib/dll却不行,搞不明白为什么,差在哪里?都是lib/dll为什么啊?

#11


引用 7 楼 jason_wentzel 的回复:
dll有好几种方式,如果你dll改用导出函数的方式,那你就不用区分release还是debug,
如果用导出类的方式,那必须区分,我的做法是每个工程分好几种编译方式,分别对应不同的dll和lib
32位:
1.x86_Debug
2.x86_Debugu
3.x86_Release
4.x86_Releaseu

64位:
1.x64_Debug
2.x64_Debugu
3.x64_Release
4.x64_Releaseu


我现在也是这么做,但是现在软件提供商提供的开发包只有release版本的lib/dll.我们在开发的时候debug与release都能用这个库,也没有问题,搞不明白为什么,差在哪里?都是lib/dll为什么啊?谁愿意维护那么多个版本啊?我觉得肯定有方法。

#12


引用 11 楼 jzp_1981 的回复:
Quote: 引用 7 楼 jason_wentzel 的回复:

dll有好几种方式,如果你dll改用导出函数的方式,那你就不用区分release还是debug,
如果用导出类的方式,那必须区分,我的做法是每个工程分好几种编译方式,分别对应不同的dll和lib
32位:
1.x86_Debug
2.x86_Debugu
3.x86_Release
4.x86_Releaseu

64位:
1.x64_Debug
2.x64_Debugu
3.x64_Release
4.x64_Releaseu


我现在也是这么做,但是现在软件提供商提供的开发包只有release版本的lib/dll.我们在开发的时候debug与release都能用这个库,也没有问题,搞不明白为什么,差在哪里?都是lib/dll为什么啊?谁愿意维护那么多个版本啊?我觉得肯定有方法。

发布的时候,一般是Release,使用的时候,也都是Debug Release混用,但是有时候还是可能会触发一些不可预知的问题。
所以如果可以的话,当然是对应版本的发布就好了。一般对于这么多版本,都可以用编译脚本来处理。这样就不需要人工处理了。

#13


肯定是可以的啊, 
你说不行的时候, 是报什么错呢?

#14


如何使自己维护的lib/dll不再需要区分debug与release?

#15


谢谢分享哦~~~

#16


不懂  但是帮顶啊 2333

#17


不懂  但是帮顶啊 2333 

#18


非常不错。非常好。

#19


新手报到,学到了不少东西啊

#20


我们在用vc++写软件的时候一般都会为不同的dll proj配置生成不同的_ud/_u的lib和dll,在其他工程中引用的时候通过编译选项在链接不同的lib,大家都是这样做的。

#21


我来学习的.

#22


我是来赚取积分的

#23


learning~

#24


内容不错 ~学习中~

#25


同来学习下,非常感谢分享!

#26


  前来学习 内容可以·

#27


如何使自己维护的lib/dll不再需要区分debug与release?

#28


貌似 http://blog.csdn.net/qq_28098067/article/details/51385394 里面有答案。

#29


learning~

#30


引用 11 楼 jzp_1981 的回复:
我现在也是这么做,但是现在软件提供商提供的开发包只有release版本的lib/dll.我们在开发的时候debug与release都能用这个库,也没有问题,搞不明白为什么,差在哪里?都是lib/dll为什么啊?谁愿意维护那么多个版本啊?我觉得肯定有方法。


debug、release 区别在于编译器对代码编译后的二进制进行优化。debug版本编译的产品是没有对代码进行“优化的”你代码写的每一行代码都完完全全的按照你写的逻辑生成二进制汇编。这样子的话是方便程序员对自己产品进行“调试”

release生成的二进制代码后还会对你编译器的“优化配置”选项按照里面所配置的优化模式进行二进制级别的代码优化,简单来说就是移除多余的遍历。分支优化,合并变量,变量由寄存器代替使用。 内联函数的整理。等等等等。详细就去看看龙书相关的知识吧。

#31


楼主发在mfc板块那么也是用vs系列的编译器了。难道楼主就没有过编译release版本在不修改任何编译配置的情况下来进行调试吗?你会发现你监视窗口里面再也不能“监视”每行返回吧的变量了。而且单步的逻辑也会不太对。

release和debug最大区别就是配置选项里面的“优化”项。 你把优化禁用掉就跟DEBUG没什么区别。当然链接的库不算。

#32


存在即合理。

#33


release只在发布的时候用一下就好了。只要你的代码里不固定某些的大小,都不会有问题。

#34


路过 路过  路过 路过

#35


该回复于2017-10-13 17:54:55被管理员删除

#36



下回还是说这种话中

#37


learning~

#38


学习赚积分,谢谢学哥指点交流

#39


哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

#40


如何使自己维护的lib/dll不再需要区分debug与release?

#41


学习了。谢谢分享。

#42


自己写的dll也可以只用release版
exe在debug或release下,都只用release版的dll是可以的
当然这对代码是有要求的,假如你的exe和dll传递的一个结构体,在debug和release下的定义不同,那么就会出问题
具体问题具体分析,你的debug模式的exe使用release版的dll出什么错?

#43


谢谢 有用 帮大忙了

#44


自己写的dll也可以只用release版

#45


自己写的dll也可以只用release版s

#46


不用维护debug,输出release即可

#47


没办法,人生就是这么无奈,很多时候就是跟这些无聊的东西在打交道。

你说操作系统都用win10多好了,非得有人用xp. vista  win7 win8 win8.1。 然后你写出的程序要在这些个操作系统上一个一个地试一遍。还要区分32 64位

#48


如何使自己维护的lib/dll不再需要区分debug与release?如何使自己维护的lib/dll不再需要区分debug与release?如何使自己维护的lib/dll不再需要区分debug与release?

#49


总结的很全,好帖子

#50


引用 47 楼 wh_2396 的回复:
没办法,人生就是这么无奈,很多时候就是跟这些无聊的东西在打交道。

你说操作系统都用win10多好了,非得有人用xp. vista  win7 win8 win8.1。 然后你写出的程序要在这些个操作系统上一个一个地试一遍。还要区分32 64位


这还真没辙,公司有些部门就全员标配各种忒旧的电脑,就只能跑xp,因为这些部门的成员平时很少用电脑,够用了所以也没得换。没更古老的系统就不错了