Валентин Скирдин
vskirdin@mail.ru
Основная часть моей сознательной программистской жизни была связана с компиляторами от фирмы Borland: сначала TurboC 2.5, потом Borland C++ 3.1, сейчас это Borland C++ 5.02. Именно как я стремился уменьшить размер плагина "EditSwap" сейчас и опишу...
По началу все как обычно - создаем проект (DLL, Win32 Console, Dinamic), генерим MAK-файл и с этим MAK-файлом и работаем... Можно конечно и из среды все это дело скомпилить, но то, о чем я Вам сейчас расскажу, такого сделать в IDE не получится...
...После компиляции размер DLL`я получился примерно 8K. Попробовал - заработало. Написал письмо Рошалу "о своих достижениях" и приатачил к письму архив со своим "творением"... Вот что я получил в ответ:
...Скомпилил без dynamic libraries - увы, размер
DLL`лины увеличился раз в семь :-(. Странно - оригинальный
EditCase после компиляции получался либо таким же монстром либо
требовал cw3230.dll... У Рошала выяснил, что...
Пробую - не получается - линковщик выдает ошибки - чой-то найти
не смог... Оказалось, что вместо TLINK стоял ILINK. Заменил ILINK на TLINK и...
опять строка cw3230.dll присутствует в файле...
...Последняя правка MAK-файла привела к желаемому результату - компактно и не требует дополнительных DLL-файлов. Вот то, что у меня получилось:
# Borland C++ IDE generated makefile # .AUTODEPEND # # Borland C++ tools # IMPLIB = Implib BCC32 = Bcc32 +BccW32.cfg TLINK32 = TLink32 TLIB = TLib # # Dependency List # Dep_EditSwap = editswap.lib EditSwap : BccW32.cfg $(Dep_EditSwap) echo MakeNode editswap.lib : editswap.dll $(IMPLIB) $@ editswap.dll Dep_editswapddll = editswap.obj editswap.dll : $(Dep_editswapddll) $(TLINK32) @&&| # Если здесь ставить ILINK32 - то без c0d32.obj ну ни как... -Tpd -ap -c -w-dll -LU:\BC5\LIB -x + #c:\bc5\lib\c0d32.obj- если эту строку оставить, то размерчик... editswap.obj $<,$* C:\BC5\LIB\import32.lib+ C:\BC5\LIB\cw32.lib # C:\BC5\LIB\cw32i.lib - эта строка приводила к cw3230.dll | editswap.obj : editswap.cpp $(BCC32) -c @&&| -o$@ editswap.cpp | # Compiler configuration file BccW32.cfg : Copy &&| -w -v- ... -a1 -IC:\BC5\INCLUDE | $@
Вот, собственно и все. Шаманство да и только :-)
Хотя, скажу по секрету, все равно получаются монстры. И это, естественно, зависит от набора используемых функций...
P.S.
Однажды, 30 Jun 1999, Владимир Тарасов (tsoftgroup@chat.ru)
написал, что не использует MAK-файлы для построения плагинов:
ну вобщем, я использовал ручной метод сборки, т.е. у меня bat-ник такого содержания:
@echo off del qwerty.dll del qwerty.lib del qwerty.obj bcc32 -c -M- qwerty.cpp tlib qwerty.lib +qwerty.obj tlink32 -Tpd -aa qwerty.obj, qwerty.dll, , import32 cw32
...вот этим я сейчас и пользуюсь. Иногда приходится некоторые функции выдирать из стандартной библиотеки и, перелопатив их, "подсовывать" компилятору, но это уже совсем другая история.
31.05.1999