GCC и NASM ссылаются на внешнюю библиотеку

Я хочу создать простое приложение на ассемблере (с 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