Конференция "KOL" » Build и Compile
 
  • MTsv DN (22.05.09 20:43) [0]
    Всем привет.

    Не знаю насколько это сложный вопрос, но меня он обескуражил. Есть код:
    library KOLLib;

    uses
     KOL;

    begin
    end.


    Если сделать CTRL+F9 (Compile) на выходе получает файл 17920 байт. А если сделать SHIFT+F9 (Build) на выходе получает файл 16896 байт.
    Как оказалось во втором случае отсутствует секция релоков в DLLке, а она насколько я знаю для библиотеки довольно важна. Так вот вопрос:

    1. Куда деваются релоки?
    То что это "косяк" KOL (по мне это "косяк", я три дня не мог понять почему у меня DLLки не подгружаются) - 100%.
    2. Как это подправить?
  • Игорь Шевченко © (23.05.09 00:05) [1]

    > Как оказалось во втором случае отсутствует секция релоков
    > в DLLке, а она насколько я знаю для библиотеки довольно
    > важна


    Вообще-то не важна. Вообще-то если у тебя загружается куча DLL, можно заранее настроить их базовые адреса утилитой rebase от ms
  • MTsv DN (23.05.09 08:49) [2]
    > Вообще-то не важна.
    Не хочу спорить. Навскидку, поиск в гугле "релоки в DLL", выдал:
    http://qunpack.ahteam.org/?p=11
    http://4pda.ru/forum/index.php?showtopic=66199&pid=1343802&mode=threaded&start=
    и еще кучу всего, т.ч. не надо офтопить, а...вопрос был в другом. Куда девает релоки подключение файла KOL.PAS? Если по сути сказать нечего, то и не надо...
  • MTsv DN (23.05.09 08:51) [3]
    В первом, читать: "8. Восстановление таблицы настроек адресов (FixUp Table или Relocations)".
    Во втором, читать Сообщение 2.
  • D[u]fa (23.05.09 11:59) [4]
    Релоки для длл очень важны. А разве если убрать КОЛ из списка, то релоки не пропадут так же?

    по-моему баг компилятора это..
  • D[u]fa (23.05.09 12:04) [5]
    проверил.. все легко..
    есть файл KOLDEF.INC в нём со 128 строки такой код:

    // TODO: check DLL project - хорошая надпись))
    {$IFNDEF NO_STRIP_RELOC}
     // by Thaddy de Koning:
     {$IFDEF _D2006orHigher}
     // strips relocs, like stripreloc.exe does
     {$SetPEFlags 1} - убрать релоки
     {$ENDIF}
    {$ENDIF}
  • MTsv DN (24.05.09 09:22) [6]
    2 D[u]fa
    Да, уж, называется, попробуй отыщи... Спасибо...
  • D[u]fa (24.05.09 15:46) [7]
    Самое обидное, что способ (без извращений) узнать тип проекта(ехе или длл) я так и не нашел...
  • MTsv DN (26.05.09 23:50) [8]
    А какие извращения то? По первому некомментированному слову в DPR файле. А так, если в глубь файла не лезть, то по PE заголовку DLL от EXE вообще одним битом отличается...
  • D[u]fa (27.05.09 14:35) [9]
    дык и как это условной директивой пропишешь то? %)
  • SPeller © (28.05.09 10:52) [10]
    А я мучаюсь и не могу понять какого Хэ в д 2009 Build и Compile выдает разные бинарники дллки, причем по Build длл не грузится другой программой... А оно "вот оно чё михалыч!!!". Дома сегодня проверю.
  • SPeller © (31.05.09 07:32) [11]
    Да, дело было в этом. Закомментил и проблема ушла. Имхо, лучше такое по дефолту не включать. А то мало того, что по build и compile разное выходит, так еще и после внесения изменений и запуска на отладку по F9 происходит то же, что и по build - обрезанный бинарник и невозможность загрузить длл.
  • D[u]fa (31.05.09 11:28) [12]
    Видимо включено на авось было, в младших версиях делфи так вообще не заметно было
Есть новые Нет новых   [134431   +10][b:0][p:0.001]