c++ linker static-libraries static-variables object-files

¿Cuál es la diferencia entre los archivos.LIB y.OBJ?(Visual Studio C++)



linker static-libraries (2)

Parece que el archivo .lib es como una colección de archivos .obj. Algunas personas también consideran el proceso, que cambia varios archivos .obj a archivos .lib, como Archivo. En ese caso, el archivo .lib es una caja de archivo .obj, que podría tratarse por igual mediante un enlazador.

Sé que .OBJ es el resultado de compilar una unidad de compilación y .LIB es una biblioteca estática que se puede crear a partir de varios .OBJ, pero esta diferencia parece estar solo en el número de unidades de compilación. ¿Hay alguna otra diferencia? ¿Es el mismo o diferente formato de archivo?

He llegado a esta pregunta cuando me pregunto si la misma variable estática definida en dos (o más) .LIBs se fusiona o no durante la vinculación con el ejecutable final. Para .OBJs las variables se fusionan. ¿Pero es lo mismo en .LIBs?


Un archivo .LIB es una colección de archivos .OBJ concatenados junto con un índice. No debería haber diferencia en cómo trata el enlazador.