от C до сборки - PullRequest
       33

от C до сборки

4 голосов
/ 23 мая 2010

как я могу получить ассемблерный код из программы на C, я использовал эту рекомендацию и я использую что-то вроде -c -fmessage-length=0 -O2 -S в Eclipse, но у меня есть ошибка, заранее спасибо за любую помощь

теперь у меня есть эта ошибка

   atam.c:11: error: conflicting types for 'select'
/usr/include/sys/select.h:112: error: previous declaration of 'select' was here
atam.c:11: error: conflicting types for 'select'
/usr/include/sys/select.h:112: error: previous declaration of 'select' was here

это моя функция

int select(int board[],int length,int search){
    int left=0, right=length-1;

    while(1){
        int pivot_index=(right+left)/2;
        int ordered_pivot=partition(board,left,right,pivot_index);

        if(ordered_pivot==search){
            return board[ordered_pivot];
        }
        else if(search<ordered_pivot){
            right=ordered_pivot-1;
        }
        else{
            left=ordered_pivot+1;
        }
    }
}

Ответы [ 3 ]

5 голосов
/ 23 мая 2010

Eclipse по-прежнему обрабатывает вывод как объектный файл

gcc -O0 -g3 -Wall -c -fmessage-length=0 -O2 -S -oatam.o ..\atam.c

генерирует сборку так, как вы хотите, но сбивает с толку ее сохранение в atam.o из-за -oatam.o, переданного в GCC (обычно вы бымагазин сборки в atam.s).Следующая команда:

gcc -oatam.exe atam.o

Пытается связать atam.o и сгенерировать исполняемый файл, но atam.o является источником сборки, а не объектным файлом, поэтому компоновщик не работает.Вы должны указать eclipse не запускать вторую команду (и вы, вероятно, хотите изменить имя выходного файла первой)

2 голосов
/ 23 мая 2010

Ошибка возникает из-за того, что select является системным вызовом Unix, а ваше определение конфликтует с объявлением в соответствующем системном заголовке.Вам нужно переименовать вашу функцию.

1 голос
/ 23 мая 2010

-S указывает компилятору не выполнять фактический этап компиляции и компоновки и останавливаться после создания сборки. С другой стороны, вы также указываете компилятору компилировать ваш файл в той же строке (в дополнение к другим конфликтующим настройкам).

Попробуйте это:

gcc -O0 -S ../atam.c

Оптимизация унесет файл сборки, сгенерированный дальше от вашего исходного кода, поэтому я дал команду gcc отключить оптимизации. Также не запускайте компоновщик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...