Что такое файлы .o? Как уменьшить размер программы? и др...

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Danik007 » 25.01.2010 20:17:12

Всем доброе время суток!
Вот решил использовать FPC, пока не пожалел, очень интересный и крупный "инструмент".

Только столкнулся с проблемами:
1. Что такое файлы формата .o и зачем они нужны ? Можно ли сделать так чтобы они не компилировались?
2. Как уменьшить размер программы? Одна и та же консольная программа, написанная в DELPHI весить 45 кб, а написанная в FPC - 160 кб :?
3. Как правильно вытащить компилятор из FPC (только нужные библиотеки и конфиги)? Из того же DELPHI это просто, зашел в BIN вытянул DCC32.exe, а из LIB вытащил нужные библиотеки.

Извиняюсь если вопросы показались глупыми. :oops: Очень надеюсь на вашу помощь! Заранее спасибо!!!
Аватара пользователя
Danik007
незнакомец
 
Сообщения: 8
Зарегистрирован: 25.01.2010 19:21:58

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение defecator » 25.01.2010 22:14:58

А чем вам мешают файлы .o ?
defecator
новенький
 
Сообщения: 43
Зарегистрирован: 07.09.2009 10:17:01
Откуда: Подольск

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение hinst » 25.01.2010 22:35:15

:!: .о необходимы. из них линкер собирает исполняемый файл
:arrow: размер - RTFM! отключите отладочную информацию
:arrow: вытащить компилятор - не забудьте ещё вытащить линкер и нужные библиотеки
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Danik007 » 25.01.2010 22:38:50

2 defecator
Они мне не мешают, просто мне интересно, что создает компилятор и можно ли удалить эти файлы без последствий.
.o файлы будут лишними в моей программе, в которую я хочу вмонтировать компилятор (не хочется разводить бардак).
2 hinst
Спасибо за ответ!!! Только хочу немного его уточнить.
1. Что такое линкер?
2.
размер - RTFM! отключите отладочную информацию

Как это сделать?
3. Так я вот и хочу узнать как правильно его вытащить, какие фалы вытаскивать? Где лежат библиотеки?
Аватара пользователя
Danik007
незнакомец
 
Сообщения: 8
Зарегистрирован: 25.01.2010 19:21:58

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение SII » 26.01.2010 00:37:05

.o-файлы -- это объектные файлы. Их порождает транслятор при трансляции исходного кода (паскалевской программы) в машинный код. "Линкер" -- жаргонное название (от англ. linker) компоновщика -- программы, собирающей из объектных файлов (как отдельных -- в виде тех же .o-файлов, так и библиотечных -- заранее скомпилированных и собранных в библиотеки) исполняемую программу. Грубо говоря, если Вы в программе используете функцию Sin, компилятор генерирует объектный файл, содержащий код для вызова этой функции, но самой функции там нет -- она лежит в какой-то библиотеке. Компоновщик видит в объектном файле вызов этой функции, ищет её в библиотеке и добавляет к окончательному коду программы.
SII
новенький
 
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Danik007 » 26.01.2010 11:47:22

2 SII
Спасибо за объяснение!!!

Но что насчет моих вопрос из 1 поста, неужели никто не знает ответа?
Аватара пользователя
Danik007
незнакомец
 
Сообщения: 8
Зарегистрирован: 25.01.2010 19:21:58

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение скалогрыз » 26.01.2010 12:05:29

Danik007 писал(а):2. Как уменьшить размер программы? Одна и та же консольная программа, написанная в DELPHI весить 45 кб, а написанная в FPC - 160 кб

1) если программа компилируется с debuginfo. воспользуйся strip-ом
2) отключи лишние модули
3) попробуй wpo: http://wiki.freepascal.org/Whole_Program_Optimization
4) перепиши RTL на более экономичный ;)

Danik007 писал(а):3. Как правильно вытащить компилятор из FPC (только нужные библиотеки и конфиги)? Из того же DELPHI это просто, зашел в BIN вытянул DCC32.exe, а из LIB вытащил нужные библиотеки.


тебе нужен fpc.exe ppc386.exe (либо ppcXXX.exe в зависимости от того куда будешь компилировать)
собственно fpc.cfg (конфигуратор) и скомпилированные модули rtl-a (*.ppu + *.o) (ищи units/i386-win32/rtl/).
всё.

если нужны дополнительные пакеты, соответственно берёшь их *.ppu + *.o и компилируешь с ними.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Danik007 » 26.01.2010 13:21:49

Всем спасибо за советы!
Кто подскажет как узнать какие библиотеки используются, может есть какой-то отчет показывающий библиотки использованные при компиляции. Просто у меня в программе указанны ShellApi,Windows,SysUtils, а компилятор требует еще (уже добавил +10 библиотек, но каждый раз компилировать чтобы узнать какой библиотеки не хватает слишком муторно :( )
Аватара пользователя
Danik007
незнакомец
 
Сообщения: 8
Зарегистрирован: 25.01.2010 19:21:58

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Climber » 26.01.2010 13:54:43

Danik007 писал(а):Кто подскажет как узнать какие библиотеки используются, может есть какой-то отчет показывающий библиотки использованные при компиляции. Просто у меня в программе указанны ShellApi,Windows,SysUtils, а компилятор требует еще (уже добавил +10 библиотек, но каждый раз компилировать чтобы узнать какой библиотеки не хватает слишком муторно :( )

Я не работал с чистым fpc... Речь идет именно о библиотеках (dll) или все-таки о модулях (pas)?
Если хочешь использовать компилятор в своей программе как встроенный, то можешь сам удалять .о файлы после окончания компиляции или при завершении программы.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Danik007 » 27.01.2010 01:38:53

Я не работал с чистым fpc... Речь идет именно о библиотеках (dll) или все-таки о модулях (pas)?

Речь идет об *.ppu + *.o, которые и являются библиотеками FPC. Можете ли что-то посоветовать по моему предыдущему вопросу?

Еще раз спасибо, всем откликнувшимся!
Аватара пользователя
Danik007
незнакомец
 
Сообщения: 8
Зарегистрирован: 25.01.2010 19:21:58

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Vadim » 27.01.2010 06:59:45

Danik007
Если речь идёт только о ppu+o, то в программу включаются все модули, которые прописаны в строке Uses, плюс, по умолчанию, модуль System.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Sergei I. Gorelkin » 27.01.2010 07:48:45

Плюс objpas, если есть директива {$mode objfpc} или {$mode delphi},
плюс fpintres или fpextres, если присутствуют ресурсы,
плюс Variants, если упоминается одноименный тип переменных.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Danik007 » 27.01.2010 13:00:22

2 Vadim
Я это знаю, только вот в том и проблема что в Uses прописаны ShellApi,Windows,SysUtils. Я их добавил (+System), но компилятор выдает ошибку и требует еще библиотек и когда это "еще" закончится не понятно, добавил 10 библиотек ему все мало :( Вот я и теряюсь!

2 Sergei I. Gorelkin
Спасибо за доп. информацию, но ничего подобного у меня нет.
Аватара пользователя
Danik007
незнакомец
 
Сообщения: 8
Зарегистрирован: 25.01.2010 19:21:58

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Vadim » 27.01.2010 14:05:09

Danik007
Код - в студию! Иначе мы так и будем толочь из пустого в порожнее. ;) С помощью спиритического сеанса мне не удалось узнать, какие Ваша программа требует модули и зачем, так что извольте предоставить прогу в материальном виде. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Что такое файлы .o? Как уменьшить размер программы? и др...

Сообщение Danik007 » 27.01.2010 14:32:48

Код: Выделить всё
program BackTime;
uses ShellApi,Windows,SysUtils;
var Today:TDateTime;
    bkTime, bkProgram: String;
    Interval, j: SmallInt;
begin
  Today:=Date; // фиксируем реальную дату
  if ParamCount<>3
  then
   begin // если параметры не заданы то печатаем подсказку
    WriteLn(output,'BackTime (c)DSKalugin@rambler.ru');
    WriteLn(output,'---------------------');
    WriteLn(output,'BackTime.exe T I P');
    WriteLn(output,'T - Date;');
    WriteLn(output,'I - Interval, [sec];');
    WriteLn(output,'P - Program');
    WriteLn(output,'---------------------');
    WriteLn(output,'Example:');
    WriteLn(output,'BackTime.exe 04.01.2000 15 "C:\Program Files\program.exe"');
   end
  else
   begin
    // 1й параметр - дата
    bkTime:=ParamStr(1);
    // 2й параметр - интервал в секундах
    Interval:=StrToInt(ParamStr(2));
    // 3й параметр - полный путь к программе
    bkProgram:=ParamStr(3);
    // установка необходимой даты
    WinExec(PChar('cmd /c date '+bkTime), SW_HIDE);
    // запуск программы
    ShellExecute(0, 'open', PChar(bkProgram), nil, nil, SW_SHOW);
    j:=0;
    while j<Interval do
     begin  // задержка в секундах
      sleep(1000);
      inc(j);
     end;
    // восстанавливаем реальную дату
    WinExec(PChar('cmd /c date '+DateToStr(Today)), SW_HIDE);
   end;
end.

компилирую с параметрами -Xs -Sh и все.
Аватара пользователя
Danik007
незнакомец
 
Сообщения: 8
Зарегистрирован: 25.01.2010 19:21:58

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru