Файлы сборки: разница между.а.С. АСМ
в симуляторе MIPS "QTSpim" принимаются файлы трех типов:
.a
.s
.asm
есть ли разница между этих файлов, и если да, то в чем разница?
1 ответов
в системах Unix / Linux:
-
.a
является обычным расширением для статических библиотек (он же архивы нескольких.o
файлы, сделанные сar(1)
). Динамические библиотеки, он же общие объекты, используйте.so
. -
.s
используется для вывода компилятора asm. (gcc -S foo.c
производит вывод asm, с именем файла по умолчаниюfoo.s
) -
.S
используется для рукописных исходных файлов asm.gcc -c foo.S
запускает его через препроцессор C (таким образом, вы можете использовать#include<>
,#if
,#define
, и комментарии в стиле C++.) Некоторые заголовки C, напримерasm/unistd.h
только#define
s, и поэтому может быть включен в a .S, чтобы получить определения, как__NR_write
номера системных вызовов, например.
в x86 есть две отдельные версии синтаксиса asm: AT&T (используется компиляторами Unix, такими как gcc) и Intel/NASM (с парой диалектов, таких как MASM против самого NASM).
.S
подходит для asm в GNU as
синтаксис, будь вы используете любые функции препроцессора C или нет.
в x86, .asm
чаще ассоциируется с Intel-синтаксисом NASM/YASM или MASM, исходным кодом. Вне x86 это, вероятно, хороший выбор для исходных файлов asm, которые могут быть собраны ассемблером для конкретной платформы, если он использует различные директивы, чем GNU as
.
на дерево источников glibc использует .S
для всех исходных файлов asm.
люди с gcc фон может поставить их MIPS asm в .S
или .s
файлы, в то время как люди с большим опытом NASM/YASM (или Windows), могут пойти на .asm
.
я бы рекомендовал против .s
файлы, потому что легко случайно перезаписать с gcc -S foo.c
.