Как скомпилировать в 32-битной сборке? - PullRequest
1 голос
/ 21 октября 2019

Эй, я использую функцию 32 сборки в моем коде c. Я компилирую это с помощью nasm и gcc.

nasm -f coff array1.asm
gcc -o array1 array1.o array1c.c

Я всегда получаю ошибку:

A
array1c.c:9:1: warning: ‘cdecl’ attribute ignored [-Wattributes]
 int PRE_CDECL asm_main( void ) POST_CDECL;
 ^~~
array1c.c:10:1: warning: ‘cdecl’ attribute ignored [-Wattributes]
 void PRE_CDECL dump_line( void ) POST_CDECL;
 ^~~~
/usr/bin/ld: i386-Architektur der Eingabedatei »array1.o« ist inkompatibel zur Ausgabe i386:x86-64
collect2: error: ld returned 1 exit status

Вот мой код:

/*
 * Driver file for array1.asm file
 */

#include <stdio.h>

#include "cdecl.h"

int PRE_CDECL asm_main( void ) POST_CDECL;
void PRE_CDECL dump_line( void ) POST_CDECL;

int main()
{
  int ret_status;
  ret_status = asm_main();
  return ret_status;
}

/*
 * function dump_line
 * dumps all chars left in current line from input buffer
 */
void dump_line()
{
  int ch;

  while( (ch = getchar()) != EOF && ch != '\n')
    /* null body*/ ;
}

1 Ответ

2 голосов
/ 21 октября 2019

Вы должны скомпилировать ваш код как 32-битный с gcc -m32, например:

nasm -f coff array1.asm
gcc -m32 -o array1 array1.o array1c.c
...