Как использовать процедуру asm и получить возвращаемое значение в C

у меня есть набор инструментов gcc версии 2.95.2 19991024 (выпуск), и теперь мне нужно использовать функцию сборки, которая находится в файле, расположенном в той же папке, что и makefile.

Я пробовал множество способов поместить этот файл в свою цепочку инструментов, но безуспешно.

В основном я заявляю, что в ASM:

.globl  util_MyFunc
util_MyFunc: 
...

И в основной пустоте файла C:

extern void util_MyFunc();
int main(void) {  
 util_MyFunc();
...

Когда я компилирую, я получаю ошибку, связанную с нераспознаванием:

/cygdrive/c/MyDev/tmp/main.o(.text+0x8bc): undefined reference to `util_MyFunc'
make: *** [test.o] Error 1

Спасибо!

РЕДАКТИРОВАТЬ:

Я пытался использовать следующее для создания файла «.o» из файла asm.

C:\MyDev>gcc -c test.asm -o test.o

Это приводит к:

gcc: utils.asm: linker input file unused since linking not done

or:

C:\MyDev>gcc test.asm -o test.o

но...:

ld: cannot open crt0.o: No such file or directory

person Black.Jack    schedule 13.12.2014    source источник
comment
Вы запускаете gcc в файле сборки?   -  person zneak    schedule 13.12.2014
comment
Вам действительно следует обновить компилятор. gcc-2.95 из прошлого века, и хорошо известно, что он глючит, не умеет оптимизировать и не соответствует стандартам. Текущая версия GCC — 4.9.2 с октября 2014 года; вы можете скомпилировать его как кросс-компилятор. Использование GCC 2.95 является ошибкой.   -  person Basile Starynkevitch    schedule 13.12.2014
comment
см. редактировать, пожалуйста. Если я использую этот старый gcc, есть причина. Я бы все равно попытался обновиться, но в любом случае... может ли кто-нибудь указать правильное направление в отношении моей проблемы?   -  person Black.Jack    schedule 13.12.2014
comment
Я не вижу никаких объяснений (даже после вашего редактирования) по поводу использования GCC 2.95. Он настолько глючный и старый, что нет причин его использовать (кроме случаев, когда вы хотите стать экспертом в истории компиляторов). Вас будут мучить другие проблемы.   -  person Basile Starynkevitch    schedule 13.12.2014
comment
Бэзил... не возражаешь, если я спрошу тебя кое о чем за кулисами? Можете ли вы поделиться своей электронной почтой?   -  person Black.Jack    schedule 13.12.2014


Ответы (1)


Каноническое расширение для файлов сборки, которое ожидает gcc, — .s. Вы должны использовать это (или собрать, используя as напрямую). Также возможно поместите -o test.o перед именем входного файла. Наконец, вам понадобятся файлы разработки libc, если вы хотите использовать libc. В противном случае используйте переключатель -nostdlib.

Вы должны попробовать: gcc -o test main.c utils.s

person Jester    schedule 13.12.2014
comment
да, это сработало, но теперь это дает мне массу ошибок ассемблера ... но ответ был правильным, поэтому зеленый проверен! - person Black.Jack; 13.12.2014