Benutzer mit den meisten Antworten
lib Projekt für MT und MD

Frage
-
Hallo zusammen
Ich habe ein LIB Projekt und will das in Projekten nutzen, die mit MT oder MD kompiliert werden. Bisher habe ich daher die LIB auch mit MT und MD kompiliert und dann per #ifdef in die Projekte die passende lib gelinkt (also wenn mit MT kompiliert die mit MT kompilierte lib und die mit MD kompiliete lib in MD Projekte). Jetzt... aber die Frage... würde ich meine lib mit NODEFAULTLIB bauen... dann könnte ich eine einzige Version der lib verwenden. Die Frage nun ist, ob's da irgendwo einen Haken hat. Angenommen ich bau die lib mit MT und NODEFAULTLIB ... (MT definiert ja z.B. kein _DLL, während MD das tut) ... könnte ich da in Probleme laufen?
danke für Tipps
Rudolf
Antworten
-
Ja. Du müsstest die ganze CRT durchschauen ob es ein Implementierungsdetail gibt dass auf _DLL basiert.
Der Compiler erzeugt ja dann Code für den Fall, dass _DLL gesetzt oder eben nicht gesetzt ist. Anschließend setzt Du Dich im Linker darüber hinweg und ignorierst ja nur die externen Referenzen.
Schau also den gesamten CRT Code durch wo die Unterschiede in der Implementierung liegen... ;)
Das weitere Problem wird evtl. sein, dass Du mit _DLL oder ohne evtl. in den Referenzen in die entsprechende DLL oder statische LIB externe Referenzen erzeugst die dann nicht oder falsch erfüllt werden.
NODEFAULTLIB ist für mich ein Schalter der entfernt gehört...
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 7. April 2016 07:43
- Als Antwort markiert Rudolf Meier Freitag, 8. April 2016 19:02
Alle Antworten
-
Ja. Du müsstest die ganze CRT durchschauen ob es ein Implementierungsdetail gibt dass auf _DLL basiert.
Der Compiler erzeugt ja dann Code für den Fall, dass _DLL gesetzt oder eben nicht gesetzt ist. Anschließend setzt Du Dich im Linker darüber hinweg und ignorierst ja nur die externen Referenzen.
Schau also den gesamten CRT Code durch wo die Unterschiede in der Implementierung liegen... ;)
Das weitere Problem wird evtl. sein, dass Du mit _DLL oder ohne evtl. in den Referenzen in die entsprechende DLL oder statische LIB externe Referenzen erzeugst die dann nicht oder falsch erfüllt werden.
NODEFAULTLIB ist für mich ein Schalter der entfernt gehört...
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 7. April 2016 07:43
- Als Antwort markiert Rudolf Meier Freitag, 8. April 2016 19:02
-
ich wusste, dass das jemand sagen würde... :-)
aber ich hätte gehofft, dass doch jemand noch eine super einfache Lösung gehabt hätte... gut, aber man kann wohl sagen, dass es ok ist, wenn ich keinerlei CRT-Funktionen ansteuere in meiner LIB ... evtl. müsste ich da drauf mal prüfen ...
Einfach geht's wohl nie. Und die Leute, die solche unnötig komplizierten Build-Systeme bauen, wollen jetzt künstliche Intelligenz bauen? :-) ja, wer's glaubt...
Aber lassen wir das... danke für die Antwort.