1 unresolved external symbol MessageBoxA
link у тебя чей?
подчеркивание перед MessageBoxA приделывает компилятор. В исходном тексте подчеркивания нет.
в user32.lib _MessageBoxA с подчеркиванием:
DOS 570194 Col 1175 1% 17:24
12 __imp__TranslateAc12 _>
n12 _M16 __imp__Mes>
4 _GetIn0 __imp__GetInputDes>
Есть ли какая-нибудь утилита для просмотра obj и lib файлов?
Удивительно, но если убрать #include <windows.h> из следующего примера, то _линкер_ начинает выдать ту же ошибку:
D:\temp\1>cl -c hw.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
hw.c
D:\temp\1>link hw.obj user32.lib
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
hw.obj : error LNK2001: unresolved external symbol _MessageBox
hw.exe : fatal error LNK1120: 1 unresolved externals
После раскоментаривания первой строки все идет нормально.
В чем же дело?
код:
// hw.c
//#include <windows.h>
main
{
MessageBox(0, "Hello, world!\n", "fuck", 0);
return 0;
}
Неудивительно.
MessageBox != MessageBoxA и calling conventions наверняка разные.
В заголовке как MessageBox определён?
PS Для просмотра бинарей есть tdump борландовский.
Если в том файле заменить MessageBox на MessageBoxA, то будет то же самое...
Точнее, то же самое будет, если компилировать так как раньше.
Теперь я скомпилировал с опцией -Gz ( __stdcall calling convention) и все заработало без включения windows.h
Непонятно только, почему то же самое для ассемблерного файла не работает.
>PS Для просмотра бинарей есть tdump борландовский
спасибо, пригодился
Оставить комментарий
gasanot
есть obj файл hw.objпри попытке link hw.obj -subsystem:windows выдается ошибка
1 unresolved external symbol _MessageBoxA
link hw.obj user32.lib -subsystem:windows не помогает
ml -c -coff hw.asm user32.lib тоже не помогает
Как избавиться от этой ошибки?