[visual studio] statische bibliothek richtig linken



  • ok das leuchtet ein, aber wie schaffen es den andere bibliotheken dass sie sowohl
    debug/release und static/dynamic funktionieren z.b. wsock32.lib.

    die kann man ja auch einfach hinzulinken und gut ist, also muss man die
    bibliothek doch irgentwie erstellen können, dass sie genauso unabhängig
    von den einstellungen ist?



  • habs jetzt mit /NODEFAULTLIB und /FORCE:MULTIBLE gelöst
    zweitere ist aber nicht die "saubere" variante...

    naja es funktioniert danke an alle



  • libmaker schrieb:

    ok das leuchtet ein, aber wie schaffen es den andere bibliotheken dass sie sowohl
    debug/release und static/dynamic funktionieren z.b. wsock32.lib.

    die kann man ja auch einfach hinzulinken und gut ist, also muss man die
    bibliothek doch irgentwie erstellen können, dass sie genauso unabhängig
    von den einstellungen ist?

    Das sind in der Regel nur Importbibliotheken, die in keiner Weise CRT-Funktionen aufrufen. Sie sorgen nur dafür, dass der Linker die importierten Funktionen aus der jeweiligen Dll zuordnen und auflösen kann.


  • Mod

    libmaker schrieb:

    habs jetzt mit /NODEFAULTLIB und /FORCE:MULTIBLE gelöst
    zweitere ist aber nicht die "saubere" variante...

    naja es funktioniert danke an alle

    Das ist genau die Metode die strikt abzulehnen ist, weíl Du nicht wissen kannst welche CRT Teile an Dein Programm gebunden werden.



  • d.h. wenn ich keine crt funktionen in der lib benutze, kann der linker sie
    dann ignorieren ?


  • Mod

    libmaker schrieb:

    d.h. wenn ich keine crt funktionen in der lib benutze, kann der linker sie
    dann ignorieren ?

    😃 Das möchte ich sehen, wie Du das machst!
    In dem Moment in dem Du C++ Code und Klassen einbaust, autmatisches Exception-Handling eingebaut wird, new verwendest etc., kommt CRT ins Spiel.



  • jo das ist mir klar aber ich nutze keine Exceptions und new wird durch dann durch
    VirtualAlloc ersetzt. mir geht es nur darum dass die lib absolut unabhängig von
    den einstellungen wird. das muss doch gehen ?

    oder kann man nicht die .lib erst beim linken der anwendung an die crt knüpfen ?
    also als objektdatei


  • Mod

    libmaker schrieb:

    oder kann man nicht die .lib erst beim linken der anwendung an die crt knüpfen ?
    also als objektdatei

    Nein! Denn mittlerweile werden ja auch Manifest Einträgein den Objekt Code eingebaut.
    Vergiss es einfach. Man kann keine saische LIB erzeugen und dann CRT unabhängig sein. Das ist overkill.
    Bau eine DLL und liefere eine Import-Lib mit klarem Interface.
    Dadurch hast Du optimale Unabhängigkeit!

    Warum willst Du überhaupt eine statische Lib in dieser Form?

    Nur mal am Rande:
    1. Du beraubst dDich extrem vieler Features wenn Du auf VirtuallAlloc zurückgreifst. Kein Leak checking.
    2. Warum verwendest Du nicht GlobalAlloc? Wenn Du VirtualAlloc für jeden Mist verwendest ist das Ressourcenverschwednung ohne Ende.



  • das VirtualAlloc habe ich nur eingebaut weil es das erste windows-alloc war was
    mir eingefallen ist 😃 da ich aber nur an einer einzigen stelle etwas
    allokieren musste, kann es nicht so schlimm sein. allerdings verwendet die STL
    wieder new...

    also klappt das wirklich nicht.

    warum ich die lib statisch haben wollte: die lib ist ein kleiner windows-wrapper
    den ich aber öfter verwende und dann immer die dll mitliefern müsste. dachte
    das könnte man irgentwie umgehen.



  • so habs mit ner dll gelöst

    vielen dank nochmal an alle und besonders an Martin Richter


Anmelden zum Antworten