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

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

  1. KEZ

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

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    > Я это уже смотрел, но про CRT там ничего нет. Может он называется по-другому? Я в этом пока не разбираюсь(

    #pragma comment(linker,"/entry:MyWinMain")
    #pragma comment(linker,"/nodefaultlib")

    void __stdcall MyWinMain( void ) {
    ...
    }
     
    1 person likes this.
  2. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Уррря! Я постиг секрет хеккерской линковки!! Всем огромное спасибо! Особенно Kezу))
    ЗЫ прикольно, в конце упикс пожал получившийся 16кб файл в 8 раз и получились заветные 2 кб!!! ))))))0
    теперь можно спокойно идти спать.......
     
  3. Ni0x

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

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Ну если у тебя получился файл размером 16кб, значит ты не постиг тайну линковщика =)
    Читай информацию по ссылке, которую я дал тебе в одном из своих сообщений.
     
  4. lexer666

    lexer666 New Member

    Joined:
    29 Jan 2007
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    http://uinc.ru/articles/28/

    В билдере можно что-то подобное сделать? Пробовал как в статье:
    не получается, причем размер пустого проекта достигает 50! кб.
     
  5. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    lexer666, дебаг билд?
     
  6. lexer666

    lexer666 New Member

    Joined:
    29 Jan 2007
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    В Bcb6 нет же режимов дебаг или релиз. В Vs05 при обоих режимах ошибки.
    В Bcb6 можно собрать маленькое приложение, как в статье?
     
  7. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    lexer666
    Code:
    #include <windows.h>
    
    #pragma comment(linker,"/entry:WinMain")
    #pragma comment(linker,"/nodefaultlib")
    #pragma comment(linker, "/MERGE:.rdata=.text") 
    #pragma comment(linker, "/MERGE:.data=.text") 
    #pragma comment(linker, "/SECTION:.text,EWRX") 
    #pragma comment(linker, "/IGNORE:4078")
    #pragma comment(linker, "/opt:nowin98")
    
    int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    	MessageBox(0,Path_to_WIN,Path_to_SYS, 0);
    	return 0;
    }
    у меня VS6. на выходе 1 кб.
     
  8. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Круто!!!
    Кстати расположение данных в одну секцию .text при определенных условиях может у некоторых антивирей (Panda, AntiVir, ещё кто-то) вызывать подозрения.
     
  9. Ni0x

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

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    lexer666, для bcb нужно отключать опции непосредственно в проекте, через pragma comment ты этого не сделаешь.
     
  10. KEZ

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

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Code:
    #pragma comment(linker, "/MERGE:.rdata=.text") 
    #pragma comment(linker, "/MERGE:.data=.text") 
    #pragma comment(linker, "/SECTION:.text,EWRX") 
    #pragma comment(linker, "/IGNORE:4078")
    
    Многие считают что это некая просьба вижуал студии "пожалуйста, собери экзешник поменьше".
    На самом деле юзать эти прагмы надо с умом, а /ignore:4078 можно вообще выкинуть. Видимо поэтому её и нет в линкерах следующих версий студий.
    Если убираете CRT - вырубайте все проверки компилятора, туда ссылающиеся, делайте свой operator new и delete, и т.п. Причем в след. студиях Release сборка почему-то (никто не знает) позволяет создать бинарник меньше (из-за уменьшения выравнивания файла (не путать с секциями), такая опция есть только у линкеров VS6, дальше нету).
    Вообщем, может я не тщательно смотрел, но в 7 и 8 студиях ставить релиз необходимо - иначе хер соберется самый маленький бинарник. Странно что они так сделали, по логике Debug и Release - "пресеты" настроек и не должны содержать в себе чего-то, что нельзя поменять через эти настройки.

    Ещё насчет оптимизация - как-то уж очень хуево она сделана в студиях 7 и 8. А может и 6 - незнаю.
    Ставишь minimize size и компиллер тебе женской логикой выбрасывает из кода всякое, по его мнению "говно", которое не используется или возвращает константу и т.п.
     
    #30 KEZ, 3 Sep 2007
    Last edited: 3 Sep 2007
  11. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    http://wasm.ru/forum/viewtopic.php?pid=188444#p188444
    тут я уже описывал как что и зачем
     
    1 person likes this.
  12. KEZ

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

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Грейт не спорь, не отнимай у меня плюсики репутации. все по понятиям. =\