Файлы сборки: разница между.а.С. АСМ

в симуляторе 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 только #defines, и поэтому может быть включен в 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.