运行我使用两个不同版本的Visual Studio构建的项目时遇到意外的访问错误.我的一般配置如下:
> LibA是一个静态库,静态运行时链接,msvc 8.0
> LibB是一个静态库,msvc 9.0
>我的集成目标项目是一个msvc 9.0 COM dll,它静态链接上面的库
此项目构建,但在运行时崩溃,在某些STL代码中存在访问冲突.堆栈似乎表明我在调用流插入操作符期间通过了两个版本(8和9)的头文件.我意识到这是一个问题.
不知何故,这个电话:
ost << std::dec << port_; //(originating from an object in LibA)
…通过以下堆栈跟踪下降:
std::basic_ostream::operator<<(...) (ostream:283,msvc 8.0 version <-- expected,since LibA was built with this version) std::num_put::put(...) (xlocnum:888,since LibA was built with this version) std::num_put::do_put(...) (xlocnum:1158,msvc 9.0 version!! !@#$!%! <-- not expected,since LibA was built with msvc 8.0) std::ios_base::flags() (xiosbase:374,msvc 9.0 version <-- follows from above)
访问冲突发生在std :: ios_base :: flags()中.我怀疑这是由于调用堆栈中的实现混合(虽然我不确定).
我的问题是.
1.)这种访问冲突的可能原因是msvc头实现的混合?
2.)有没有办法阻止这些实现混合?
3.)是否有更好的方法来配置这三个项目进行集成(假设从msvc 8.0移动LibA是不可取的)?
我知道在this question和this one中提出的想法.在这里我最感兴趣的是这个具体问题,如果有办法可以避免它.
任何见解将不胜感激.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。