Używam dodatku SP1 dla programu Visual C++ 2008. Mam aplikację skompilowaną w trybie debugowania, ale połączoną z biblioteką w trybie zwolnienia.Łączenie z biblioteką w wydaniu i .exe w przypadku błędów debugowania w Visual Studio
Występuje awaria podczas uruchamiania aplikacji. Aby problem mniejszy, stworzyłem proste rozwiązanie z 2 projektów:
- lib_release (generuje .lib, w trybie uwalniania)
- exec_using_lib_release (genereates .exe, w trybie debugowania)
projekt „lib_release” jest na tyle prosty, aby mieć prostą klasę:
//Foo.h
#include <vector>
class Foo {
std::vector<int> v;
public:
void doSomething();
};
//Foo.cpp
#include "Foo.h"
void Foo::doSomething() {}
projekt „exec_using_lib_release” jest prosta tak:
//main.cpp
#include "Foo.h"
int main() {
Foo foo;
foo.doSomething();
return 0;
}
To się zawiesza, to ten sam problem zgłoszony przez How do you build a debug .exe (MSVCRTD.lib) against a release built lib (MSVCRT.lib)?, ale jego odpowiedź nie zadziałała.
Otrzymuję te same ostrzeżenia o linkerze, próbowałem wykonać te same kroki, ale żadna nie działała. Czy jest coś, czego mi brakuje?
EDIT:
Na lib_release (który tworzy bibliotekę w trybie uwalniania), używam multi gwintowanych (/ MT), a na exec_using_lib_release używam multi gwintowanych Debugowanie (/ MTd). Myślę, że jest to oczekiwany sposób robienia tego, ponieważ chcę aby plik .lib był tworzony bez informacji debugowania. Przeczytałem dokument pod numerem MSDN Runtime library, a są to ustawienia łączenia z CRT w sposób statyczny.
Nie mam również "Wspierania wspólnego środowiska językowego".
Jest to dokładna przykładowy kod (Foo.h) czy jest to uproszczony, a nie to, czego naprawdę próbował? – Timbo
@Timbo to prawie to samo, tylko klasa Foo ma wersję .cpp, która ma zaimplementowaną metodę doSomething(). –
Czy jesteś dostawcą statycznej biblioteki, czy jest to strona trzecia? – KJAWolf