GCC и NASM връзка към външна библиотека

Искам да създам просто приложение в Assembly (с NASM), което ще получи аргументите на командния ред. Засега използвам extern _GetCommandLineA и call _GetCommandLineA за извикване на функцията. Компилирам кода и получавам обектния файл от NASM. Сега искам да използвам GCC за свързване и създаване на EXE. Не искам да използвам стандартните библиотеки, затова използвам тази команда, за да създам изпълнимия файл:

gcc test.obj -s -nostartfiles -nostdlib -nodefaultlibs -o test.exe

Получава ми грешка Undefined reference to GetCommandLineA и, като начинаещ в ASM, не знам защо? Някаква помощ наистина ще бъде оценена. Благодаря предварително!


person ali    schedule 05.06.2012    source източник


Отговори (1)


GetCommandLineA и GetCommandLineW са дефинирани в kernel32.dll, който, подобно на повечето API на Windows, използва Конвенция за извикване на WINAPI (stdcall).

За да извикате тази функция от асемблиране, ще трябва да посочите напълно "декорираното" име на символа, в този случай _GetCommandLineA@0

Заменете _GetCommandLineA във вашия асемблиращ файл с _GetCommandLineA@0

person Unsigned    schedule 05.06.2012