C++编译器的问题
我这个问题有点特殊,请大家仔细看我的描述,然后再作答,谢谢!
前言:
最近涉及到不少跨平台编程和移植的情况。
主要是把Unix或Linux的程序,移植到Windows下编译使用。
我这里提出的问题,就是在一个Unix程序的移植过程中产生的。
问题描述:
我有一个程序,移植到Windows下,经过一些修正和处理后,用VS2008建了工程文件,并编译之。
结果是release和debug模式都很正常,且生成A.exe文件。但是程序运行到一半的时候就出错了,察看错误报告里显示:
AppName: A.exe AppVer: 0.0.0.0 ModName: msvcr90.dll
ModVer: 9.0.21022.8 Offset: 0006d0f0
似乎问题出在msvcr90.dll的调用上。(可以肯定的是,绝对不是缺少这个文件造成的。)
请大家不要忙着发表建议,再看看我接下来的描述。
我把同样的代码,在Code::Blocks上编译,这次用的是C::B默认的Mingw版g++编译器。
这次的编译当然也很顺利。且生成的程序(release和debug版)运行都非常正常,且没有任何错误。
所以我的问题就是,为什么VC上编译出来的程序,运行的时候出错,而C::B上的就很正常?
附加信息:
我曾察看VC的项目属性,发现C/C++选项卡的运行时库默认是使用多线程DLL /MD。
我尝试把他设为非DLL的多线程库 /MT (主要目的是避免调用那个dll)。
结果这次编译出来的程序还是运行到一半出错。这次显示的错误是出在A.exe上了:
AppName: A.exe AppVer: 0.0.0.0 ModName: A.exe
ModVer: 0.0.0.0 Offset: 00075b66
问题总结:
综上所述,大家认为,问题的根本原因到底出在哪里?代码本身似乎没有问题,否则C::B下编译出来的程序就不会正常运行。
问题应该是出在VC上,我猜想可能是VC的项目设置里,也可能是VC的编译器上,说不准。
所以,请有经验的高手帮忙指教,期望找到合理的答案。谢谢!
[解决办法]
mark
[解决办法]
貌似你有部分代码对VC支持的不好啊!
[解决办法]
在VC中调试,看出错在哪里
[解决办法]
G 00075b66 完美解决问题。
vc实现c库函数的方式和gcc不一样,你把那些使用了gcc特性的编码修改即可。