*.obj and *.lib



  • ist lib nur eine Sammlung von obj Dateien? ich hab gehört es hat irgendwas mit alignment zu tun. Kann man es genauer erklären?



  • Kommt auf die *.lib an.

    Bei statischen Libraries ist das so wie Du gesagt hast.

    Bei dynamischen Libraries ist in den *.lib Files nur ein Stub drin. Der eigentliche Code ist ja dann in der *.dll.

    Simon



  • static libs:
    z.B. ich hab eine Datei mit nur eine Funktion compiliert:
    foo.c

    void foo()
    {
      printf("abcd");
    }
    

    foo.h ist auch vorhanden
    dann hab ich ein output object datei foo.obj
    aber ich kann die datei auch in eine dsp packen und als foo.lib compilieren.
    ist foo.obj ist völlig identisch wie foo.lib? irgendwas stimmt nicht, wir reden nicht wie man es verwendet, nur vergleich die beiden dateien.



  • Die *.cpp Dateien werden kompiliert ➡ *.obj Dateien
    (Mit denen machst DU nichts, nur der Linker.)

    Der Linker fügt nun die *.obj Dateien zusammen: entweder zu *.lib, *.dll, *.exe.

    Simon



  • Der Linker fügt nun die *.obj Dateien zusammen...

    einfach so zusammensetzen, oder extra information wird hinzufügt?
    wenn nach der Kompilierung, object dateien hat zuerst nichts mit platform zu tun (nur std functionen werden verwendet), nachdem lib erzeugt wird, ist dann platformabhängig? wenn es so ist, muss man alignment von platform nicht berücksichtigen?



  • netrobot schrieb:

    wenn nach der Kompilierung, object dateien hat zuerst nichts mit platform zu tun (nur std functionen werden verwendet)

    Und wie ein object-file schon Plattformanhängig ist. Schau dir doch mal eines an.
    Allein der Header:

    ELF Header:
      Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
      Class:                             ELF64
      Data:                              2's complement, little endian
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V
      ABI Version:                       0
      Type:                              REL (Relocatable file)
      Machine:                           Advanced Micro Devices X86-64
      Version:                           0x1
      Entry point address:               0x0
      Start of program headers:          0 (bytes into file)
      Start of section headers:          1376 (bytes into file)
      Flags:                             0x0
      Size of this header:               64 (bytes)
      Size of program headers:           0 (bytes)
      Number of program headers:         0
      Size of section headers:           64 (bytes)
      Number of section headers:         16
      Section header string table index: 13
    

    Machine, OS/ABI/CLASS,usw. sind GARANTIERT nicht plattformunabhängig.



  • Obj-Dateien sind natürlich selbst schon Plattform-abhängig. Es ist schließlich Maschinencode der drin steht. Oder wie oft soll noch kompiliert werden?

    Und eine Lib ist einfach (zumindest beim MSVC) ein File-Archiv. Kannst du mit jedem Entpacker, wie 7zip, reinschauen.



  • hat lib auch irgendwelche Adresse information gespeichert ? wenn ja, ist eine absolute Adresse od. relativ?



  • netrobot schrieb:

    hat lib auch irgendwelche Adresse information gespeichert ? wenn ja, ist eine absolute Adresse od. relativ?

    was für adressen?
    stell die die lib einfach als eine zip-datei vor, in der mehrere obj-files liegen können.


Anmelden zum Antworten