又遇到debug和release版本表现不同的奇葩问题

文章详细记录了解决使用VC++ 2008编译Win32 C++工程中遇到的libc.lib库冲突及Freetype库初始化失败问题的过程。通过更改运行时库设置为多线程(/MT)来解决externC相关代码及艺术增强库artag导致的问题,同时避免了libc.lib库的引用。最终分析得出,问题根源在于运行时库的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vs2008件了个win32 C++工程,用了这些库ogre174,opencv,artag,artag是一个使用c语言写的静态库,增强现实用的,这个静态库是用vc6.0写的,刚开始是这样来做的:忽略libc.lib库,编译的时候遇到一个问题,然后自己定义一个

extern "C" { FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]}; }


问题貌似就解决了,但是release运行出错,调试运行release,提示freetype库初始化失败,用到字体的地方主要是那个mTrayMgr,托盘管理器,把和这个相关的东西注释,


调试运行release版本没有问题,但是直接运行release报内存读错误,直接运行和调试运行debug都正常,郁闷了吧,都是这个artag这个用vc6.0  c语言写的静态库搞的鬼


然后我就试着,对每个cpp文件设置他们的:属性  ---  c/c++  ----- 代码生成,里面的运行时库,选择:多线程(/MT),这样再从新编译然后就没有问题了,

这样设置就不需要extern "C" { FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]}; }这一句了。但还是忽略libc.lib。


看来涉及到这类问题的时候,根源还是这个运行时库的选择啊。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值