none
lib Projekt für MT und MD RRS feed

  • 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

    Freitag, 25. März 2016 11:53

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

    Montag, 4. April 2016 09:16
    Moderator

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

    Montag, 4. April 2016 09:16
    Moderator
  • 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.

    Freitag, 8. April 2016 19:06