.O

O-fil

Compiled Object File
Stil et spørgsmål
HURTIGT SVAR

En .o-fil er det maskinkode-output, som en compiler (gcc, clang) producerer for én C- eller C++ kildekodefil før linkning. Du kan ikke køre den direkte - linkeren kombinerer flere .o-filer og biblioteker til en færdig eksekverbar fil eller et delt bibliotek. For at inspicere en, skal du bruge nm, objdump eller readelf på Linux/macOS. På Windows dækkes den samme rolle af .obj-filer.

Udvikler: Unix lineage; ELF defined by System V ABI / Tool Interface Standard, COFF/Mach-O by Microsoft/Apple. No single vendor. Kategori: Udviklerfiler Åben standard MIME: application/x-object
ÅBNER PÅ Windows macOS Linux
Relateret: .DO · .MD · .HEX · .XSD

På denne side

19k+ filtyper indekseret
Sidst gennemset Aug 17, 2026

Er du ikke sikker på, hvad din fil er?

Træk en fil over i vores identifikator - vi læser kun de første bytes for at navngive formatet.

Identificer en fil

Hvad er O-filformatet?

En .o-fil er en kompileret objektfil - et mellemliggende binært format produceret af en compiler som GCC eller Clang, når den oversætter en enkelt C-kildekodefil til maskinkode. Outputtet indeholder maskininstruktioner, initialiserede og uinitialiserede datasegmenter, en symboltabel og relokeringsindgange, men den er endnu ikke eksekverbar: referencer til funktioner og variabler defineret i andre oversættelsesenheder efterlades som uafklarede pladsholdere til linkeren.

Det binære format afhænger af målplatformen:

  • På Linux og de fleste Unix/BSD-systemer bruger .o-filer ELF (Executable and Linkable Format) containeren, genkendt på magic bytes \x7FELF ved byte-offset 0 og en e_typeET_REL (relocatable, værdi 0x0001).
  • På macOS bruger den tilsvarende fil Mach-O-formatet, der begynder med CF FA ED FE (64-bit little-endian).
  • På Windows kaldes den funktionelt identiske fil med filtypen .obj og bruger COFF-formatet.

Efter kompilering kombinerer linkeren (ld) en eller flere .o-filer med biblioteker for at producere en eksekverbar fil eller et delt bibliotek. Flere .o-filer kan også bundtes i et statisk arkiv ved hjælp af kommandoen ar.

.o-filer er midlertidige build-artefakter genereret automatisk af toolchainen og er ikke beregnet til at blive åbnet af slutbrugere. Udviklere, der har brug for at inspicere dem, kan bruge nm, objdump eller readelf til at undersøge symboler, sektioner og disassembly.

Sikkerhed og tryghed

RISIKO: LOW

En .o er build-tidsdata, ikke noget operativsystemet starter, så den udgør lille direkte risiko for slutbrugere - du kan ikke dobbeltklikke og køre den. For udviklere er bekymringen tillid til forsyningskæden: linkning af et objekt fra en upålidelig kilde bager dets maskinkode direkte ind i dit program, så byg kun med objekter/biblioteker fra kilder, du stoler på. Objekterne i dit eget build-træ er sikre at slette; de regenereres ved næste kompilering.

Formatdetaljer

kort fortalt
FULDSTÆNDIGT NAVNCompiled Object Fileogså kendt som object file, object code
UDVIKLERUnix lineage; ELF defined by System V ABI / Tool Interface Standard, COFF/Mach-O by Microsoft/Apple. No single vendor.siden Object-file concept from early Unix (1970s); ELF since System V Release 4 (early 1990s)
MIME-TYPEapplication/x-object
TYPEKompileret relokerbar objektfil (maskinkode + symboler, endnu ikke linket)
STANDARDÅben · royaltyfri
MAGIC BYTES · FILSIGNATUR
OFFSET
00010203
HEX
7F454C46
ASCII
·ELF
Filtypen .o er en rolle, ikke et enkelt byte-format. På Linux/Unix er en .o et ELF-objekt, der begynder med 7F 45 4C 46 («\x7FELF») med e_type = ET_REL (0x0001, relokerbar). På macOS er en .o Mach-O, der starter med CF FA ED FE (64-bit LE) eller FE ED FA CF (big-endian). Windows COFF .obj-objekter har ingen fast indledende magic (maskinfelt, f.eks. 64 86 for x86-64, nær starten). Identificer ved platformens objektcontainer, ikke én universel signatur.

Programmer der åbner O-filer

Windows2 apps
Microsoft Visual Studio Freemium MSVC bruger COFF .obj, ikke Unix .o. En Unix .o kan kun bygges på Windows via WSL/MinGW med en matchende toolchain - det er ikke en indfødt åbner.
MinGW-w64 / WSL (gcc, binutils) Open-source Leverer gcc/clang + binutils på Windows, så du kan linke og inspicere Unix-agtige .o-filer.
macOS2 apps
Apple Xcode / Clang Gratis Xcodes clang bygger og linker Mach-O .o-filer. Inspicer med «nm»/«otool -tv fil.o» (installer via «xcode-select --install»).
GCC (Homebrew) Open-source Alternativ compiler til at bygge/linke .o-filer; udsender Mach-O objekter på macOS.
Linux3 apps
GCC / Clang (linker) Open-source Du åbner ikke en .o - du linker den: «gcc a.o b.o -o app» producerer den eksekverbare fil. Kompiler et enkelt objekt med «gcc -c fil.c».
binutils (nm / objdump / readelf) Open-source «nm fil.o» viser symboler; «objdump -d fil.o» disassembler; «readelf -a fil.o» viser den fulde ELF-struktur.
Ghidra Open-source Importer .o-filen for fuld disassembly/dekompilering ved reverse-engineering af kompileret kode.

Tekniske detaljer

dyb specifikation
ContainerformatELF på Linux/Unix, Mach-O på macOS, COFF på Windows (hvor filen typisk hedder `.obj`)
FilkodningBinær (ikke menneskeligt læsbar tekst)
ELF magic bytes`7F 45 4C 46` (`\x7FELF`) ved byte-offset 0 - findes i alle ELF-baserede objektfiler
ELF objekttype-felt`e_type = ET_REL` (0x0001) i ELF-headeren - skelner et relokerbart objekt fra en eksekverbar fil (`ET_EXEC`) eller et delt bibliotek (`ET_DYN`)
MIME-type`application/x-object`; også overført som `application/octet-stream` af generiske servere
Byte-ordenKodet i `EI_DATA`-byten i ELF-headeren: little-endian (`ELFDATA2LSB`) på x86/x86-64/ARM, big-endian (`ELFDATA2MSB`) på PowerPC/SPARC
Nøglesektioner`.text` (eksekverbar kode), `.data` (initialiserede globale variabler), `.bss` (nul-initialiserede globale variabler), `.rodata` (skrivebeskyttede konstanter)
Symboltabel`.symtab`-sektionen viser hvert defineret og refereret symbols navn, binding (lokal/global/svag), type (funktion/objekt) og værdi
Relokeringsindgange`.rel.text` / `.rela.text`-sektioner registrerer hver adresseplads, som linkeren skal patche, når objektfiler flettes til en endelig binær fil
Arkitekturidentifikation`e_machine`-feltet i ELF-headeren identificerer CPU-målet: `EM_X86_64` (0x3E), `EM_AARCH64` (0xB7), `EM_386` (0x03), osv.
Typisk filstørrelse1 KB til flere MB pr. oversættelsesenhed, afhængigt af kildekodens kompleksitet og compilerens optimeringsniveau
KomprimeringIngen - objektfiler gemmes som rå ukomprimerede binære data
En-til-en kompileringsmodelPræcis én `.o`-fil udsendes pr. kildeoversættelsesenhed (én pr. `.c` eller `.cpp` fil); linkeren fletter dem senere
Statisk bibliotekspakningFlere `.o`-filer arkiveres i et `.a` statisk bibliotek ved hjælp af `ar`, som bevarer hvert objekt som et navngivet medlem
Kun opløsning ved link-tidI modsætning til `.so` / `.dylib` delte biblioteker, opløses alle symbolreferencer i en `.o` fuldstændigt ved link-tid, hvilket ikke efterlader nogen dynamiske afhængigheder ved kørsel
Inspektionsværktøjer`nm` (liste over symboler), `objdump` (disassembly og sektions-dumps), `readelf` (ELF-header og sektionsdetaljer), `otool` (macOS Mach-O tilsvarende)
UdgivetObject-file concept from early Unix (1970s); ELF since System V Release 4 (early 1990s)
Seneste versionELF format frozen since the 1990s; container evolves with each compiler/ABI
Åben standardJa · royaltyfri
Specifikationrefspecs.linuxfoundation.org

O-konverteringer

Fællesskabets Q&A

spurgt af brugere
Stil et hurtigt spørgsmål
Få hjælp fra folk, der arbejder med O-filer. Vær specifik - medtag dit system og din softwareversion.
Ingen konto nødvendig · svar normalt inden for en dag

Ingen spørgsmål endnu - vær den første til at spørge om O-filer.

Ofte stillede spørgsmål

Hvad er en .o-fil?
En kompileret objektfil - det maskinkode-output, en compiler producerer for én kildekodefil før linkning. Linkeren kombinerer flere .o-filer (plus biblioteker) til en færdig eksekverbar fil eller et bibliotek. På Windows bruger den samme rolle filtypen .obj.
Hvordan åbner jeg en .o-fil?
Du åbner den ikke som et dokument - den forbruges af linkeren under et build. For at inspicere den skal du køre «nm fil.o» (symboler), «objdump -d fil.o» (disassembly) eller «readelf -a fil.o» (ELF-detaljer) på Linux/macOS.
Kan jeg slette .o-filer?
Ja - objektfiler er mellemliggende build-artefakter. Sletning af dem (eller kørsel af «make clean») betyder blot, at compileren genererer dem igen ved næste build. Slet dem ikke midt i et build.
Hvad er forskellen på .o, .a og .so?
En .o er et enkelt kompileret objekt. En .a er et statisk bibliotek - et arkiv af .o-filer, der kopieres ind i dit program ved link-tid. En .so er et delt bibliotek, der indlæses ved kørsel. Alle tre er bygget ud fra de samme objekter.
Er en .o det samme som en Windows .obj?
Samme rolle (et kompileret objekt), men forskellig container: Unix .o er ELF/Mach-O, Windows .obj er COFF. De er ikke indbyrdes udskiftelige - genkompiler kildekoden til målplatformen.
Hvorfor får jeg «undefined reference», når jeg linker mine .o-filer?
Et symbol (funktion/variabel), som dit objekt bruger, er ikke defineret i nogen .o eller bibliotek, du linker. Tilføj det manglende objekt/bibliotek til link-kommandoen, eller definer symbolet. «multiple definition» er det modsatte - det samme symbol findes i to objekter.

Referencer

1GNU Binutils - nm/objdump/readelf documentationwww.gnu.org
2Wikipedia - Object fileen.wikipedia.org

Udforsk mere

på tværs af databasen

Populære filtyper i denne uge

1.AQQAQQ Instant Messenger File
2.CRDOWNLOADChrome Partial Download File
3.MDMarkdown Document
4.BINCD/DVD Disc Image (BIN/CUE)
5.PARTPartial Download File
6.RPMSGRestricted Permission Message
7.NOMEDIAAndroid No-Media Marker File
8.EXEWindows Executable (Portable Executable)
9.AVIFAV1 Image File Format (AVIF)
10.ICSiCalendar data file

Relaterede filtyper

.DOStata Do-File
.MDMarkdown Document
.HEXIntel HEX File
.XSDXML Schema Definition
.MAPSource Map (JavaScript / CSS)
.CONFIGConfiguration File

Gratis filværktøjer

En fil-identifikator og billedkonverter direkte i browseren - alt kører på din enhed.

Åbn værktøjskassen

Gennemse filtyper A-Å