Проблемы с компиляцией сорца под Vs6

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Piflit, 1 Sep 2007.

  1. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Есть сорц.
    Code:
    #include <windows.h>
    
    void MyWinMain(void)
    {
    	MessageBox(NULL,"Hello, world",NULL,MB_OK);
    	ExitProcess(0);
    }
    В том же архиве, что и сорц (они не мои) лежит бинарник размером 2 кб. При попытке скомпилировать сорц пишет
    Code:
    Compiling...
    tinyapp.cpp
    Linking...
    tinyapp.obj : error LNK2001: unresolved external symbol __chkesp
    Debug/TinyApp.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
    
    TinyApp.exe - 2 error(s), 0 warning(s)
    Если заменить MyWinMain (не знаю, стоит ли это вообще делать) на WinMain выдает
    Code:
    Compiling...
    tinyapp.cpp
    C:\Tiny\TinyApp\tinyapp.cpp(4) : warning C4007: 'WinMain' : must be '__stdcall'
    C:\Tiny\TinyApp\tinyapp.cpp(4) : error C2731: 'WinMain' : function cannot be overloaded
            C:\Tiny\TinyApp\tinyapp.cpp(3) : see declaration of 'WinMain'
    Error executing cl.exe.
    
    TinyApp.exe - 1 error(s), 1 warning(s)
    Я запутался. Вот сорц.
     
    1 person likes this.
  2. !_filin_!

    !_filin_! Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    86
    Likes Received:
    40
    Reputations:
    16
    unresolved external symbol __chkesp --- в асме такая ошибка обычно означает что неподключон файл с описанием....
     
    #2 !_filin_!, 1 Sep 2007
    Last edited: 1 Sep 2007
  3. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Вот он - пример что надо=)

    P.S. Если хочешь, чтоб твой заработал - выкинь ExitProcess(0);

    З.З.Ы. КЕЗ не ори на мну, лучше в асе ответь=)
     
    #3 Alexsize, 1 Sep 2007
    Last edited: 1 Sep 2007
  4. da_ff

    da_ff Elder - Старейшина

    Joined:
    11 Jul 2006
    Messages:
    118
    Likes Received:
    22
    Reputations:
    26
    в первом случае создается новая точка входа в программу вот почитать http://rsdn.ru/article/cpp/crt.xml
    во втором не соответствуют параметры функции winmain, почитать можно там же
     
    1 person likes this.
  5. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    !_filin_!, #include <windows.h> - все подключено, windows.h лежит в инклудах.
    Alexsize, та же ошибка(
    da_ff, читаю...
     
    #5 Piflit, 1 Sep 2007
    Last edited: 1 Sep 2007
  6. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    вы не перестаете меня удивлять, кодеры античата.

    Code:
    tinyapp.obj : error LNK2001: unresolved external symbol __chkesp
    Компилер при включенной опции разных чекингов (помоему /Gs) добавляет тебе абсолютно на*** не нужный (почти) код __chkesp, который проверяет стек после каждого вызова. А CRT у тебя отключена в проэкте, поэтому линкуется без нее и ясен *** ф-ии нет нигде. Вырубай либо проверку в настройках проэкта, либо добавь CRT. Делай первое конечно ;)
    И поставь сразу main'у __stdcall. Например APIENTRY или WINAPI.

    это нихера не что надо. у него сделан минимальный бинарник, там отключены CRT, и т.п.
     
    #6 KEZ, 1 Sep 2007
    Last edited: 1 Sep 2007
  7. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    1) где отключить CRT? пробежал все настройки, не нашел. можно ли писать бОльшие проги (например, блокнот) с отключенным CRT?
    2)
    void MyWinMain(void) __stdcall {} так? или
    void WINAPI MyWinMain(void); ?
     
  8. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    альт + F7 - там все найдешь.
     
  9. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Я это уже смотрел, но про CRT там ничего нет. Может он называется по-другому? Я в этом пока не разбираюсь(
     
  10. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Грохни вообще все что в Linker окошке. Он все что надо там сам проставит. Пример то простой.
     
  11. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    как же тогда определить EP?
     
  12. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    =(
    _http://slil.ru/24804237
     
    #12 Alexsize, 1 Sep 2007
    Last edited: 1 Sep 2007
  13. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    24кб+открывается окно консоли. мда=\
     
  14. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Хех. Делай релиз и читай статью греата по оптимизации в линкере. А то что в консоли... =)
     
    1 person likes this.
  15. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    1) int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int) - вин проект или в настройках SUBSYSTEM:WINDOWS, надеюсь разберешься.
    2) #pragma comment(linker, "/ENTRY:myEntry") , где myEntry твоя точка входа.
    Пишу в неадекватном состоянии, если где ошибься - поправьте.
    http://forum.vingrad.ru/topic-38864.html
     
    1 person likes this.
  16. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    прочел http://rsdn.ru/article/cpp/crt.xml .
    самое смешное, что у меня там нечего отключать, ибо параметра _ATL_MIN_CRT нет=\

    Ni0x, 1 пробовал, рез тот же. по поводу второго... подумал и решил вручную точку входа не ставить, просто не знаю, куда.

    Дайте сорц оконного хелло ворлда на winapi. Я попробую его у себя скомпилить.
    блин... целый вечер за этим сижу... бред какой-то...
     
  17. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Инструкция:
    Win32 Application -> An empty project -> File View -> Source Files -> Add Files To Folders -> создаешь файл с расширением сpp -> далее пишешь в нем:

    Code:
    #include <windows.h>
    
    int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    MessageBox(0,"hello","123", 0);
    return 0;
    }
    
    F7
     
    1 person likes this.
  18. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    мде. значит, это уже было. так и должно быть 24 кб? если да, то как в примере сделали 2?
    при мах сжатии upx 9.5. но все равно не то=\
     
    #18 Piflit, 2 Sep 2007
    Last edited: 2 Sep 2007
    1 person likes this.
  19. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Piflit Я думаю это настройки линкера...
    в частности попробуй вот так! объеденить все данные в одну секцию у меня раза в два снижает размер :)
    #pragma comment(linker,"/FILEALIGN:512 /MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR /IGNORE:4078")
     
  20. inv

    inv Banned

    Joined:
    3 Aug 2007
    Messages:
    261
    Likes Received:
    143
    Reputations:
    -58
    _http://uinc.ru/articles/28/ там есть исходник
    а вообще не вижу смысла........на стадии изучения основ останавливаться на этом
     
    1 person likes this.