我正在使用Visual C++ 2008 SP1。我有一个以调试模式编译的应用程序,但在发布模式下与库相链接。在Visual Studio中调试发行版中的库和调试时崩溃中的exe文件
我在应用程序启动时发生崩溃。为了使问题更小,我创建了2个项目的简单解决方案:
- lib_release(生成的.lib,在释放模式)
- exec_using_lib_release(genereates一个。exe,在调试模式下)
的“lib_release”项目是很简单的有一个简单的类:
//Foo.h
#include <vector>
class Foo {
std::vector<int> v;
public:
void doSomething();
};
//Foo.cpp
#include "Foo.h"
void Foo::doSomething() {}
的“exec_using_lib_release”项目是简单的是这样的:
//main.cpp
#include "Foo.h"
int main() {
Foo foo;
foo.doSomething();
return 0;
}
它崩溃了,这是How do you build a debug .exe (MSVCRTD.lib) against a release built lib (MSVCRT.lib)?报告的同样的问题,但他的回答对我来说并不奏效。
我得到了相同的链接器警告,我尝试了相同的步骤,但都没有工作。有什么我失踪?
编辑:
在lib_release(创建在释放模式库),我使用多线程(/ MT),并在exec_using_lib_release,我使用多线程调试(/ MTd)。我认为这是实现它的预期方式,因为我希望创建.lib而不用调试信息。我在MSDN Runtime library处阅读文档,这些是静态连接CRT的设置。
我没有'Common Language Runtime Support'。
这是确切的示例代码(foo.h中),或者是简单的,而不是你真正尝试过什么? – Timbo 2009-08-04 13:57:16
@Timbo它几乎是一样的,只是Foo类有一个.cpp版本,它已经实现了doSomething()方法。 – 2009-08-04 14:38:51
你是静态库的提供者,还是第三方? – KJAWolf 2009-08-04 20:02:04