记一次链接dll、lib的低级错误

最近在做一个软件,需要QT调用dll的项目。

昨天遇到一个问题,debug下一切正常,而release下有些情况下就会报错内存冲突。这个错误还是很明显的,肯定是内存管理问题,直错很简单,很快发现了我有个地方数值设置错了,导致越界。

但是运行之后,发现不论怎么修改dll运行还是报错,问题相同,还是内存冲突。于是我开始进一步找错,补充初始化之类的都试了都还是报错。

本来dll主函数运行正常时会返回0,错误返回1;为了找错,我把dll改成了直接返回111,结果始终为1。很是奇怪,我确定我已经修改了dll和lib,通过其他程序链接确认程序没问题,这就说明链接的不是正确的dll和lib。

突然我想起我之前为了测试在release下放了一个版本的dll和lib,而我链接用的是#pragma comment(lib, "DecoderApp.lib"),会直接找exe同目录下的,
wtf!!!!浪费了2个小时,就因为这么一个低级错误。

总结教训:
1.写代码要严谨,能初始化的尽量初始化,养成好习惯。debug下会自动对一些未初始化的值自动初始化,因此有的越界问题不会报错;而release下是不会自动初始化的,会报错。这也是为什么要debug和release版本都要测试的原因。

2.动态链接调试的时候注意dll和lib的目录问题。

猜你喜欢

转载自blog.csdn.net/lin453701006/article/details/81407784