Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как уменьшить размер откомпиллированного файла? gcc делает под мегабает... 
V
    Опции темы
Anton Vatchenko
Дата 11.4.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Написал приложение, обычный void main, где просто инициализируется mysql. Ничего больше. Компилирую как

gcc -o planet src/main.c src/database.c -L/usr/lib/mysql -lmysqlclient -L/usr/lib -lz

Получаю размер под мегабайт... Я ожидал не больше 100 кб... Может там какая-то лишняя информация есть?


--------------------
user posted image
PM MAIL   Вверх
bilbobagginz
Дата 11.4.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



1. зачем уменьшать ?
2. почему не читаем мануал gcc ? (оптимизация на величину экзешника, опции -O )
3. а какой величины получается "обычный мейн", с "обычной инициализацией mysql" под другими компиляторами ?

с.у.в.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Anton Vatchenko
Дата 11.4.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Смотрю этот размер примерно совпадает с библиотекой mysqlclient, которую я использую... Это что, каждая библиотека, которую я использую, будет дописываться к моему приложению?

мануал gcc ничего не дал... все эти O2, O3, O дали снижение размера на 5 кб (из 1.4 мб).


--------------------
user posted image
PM MAIL   Вверх
Glip
Дата 11.4.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 2
Всего: 18



не оно ?
 
Цитата

-shared
           Produce a shared object which can then be linked with other objects
           to form an executable.  Not all systems support this option.  For
           predictable results, you must also specify the same set of options
           that were used to generate code (-fpic, -fPIC, or model suboptions)
           when you specify this option.[1]



--------------------
user posted image
PM MAIL   Вверх
Anton Vatchenko
Дата 11.4.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



не помогло.. Я так понял, что я как-то статически привязываю библиотеки... Может как-то динамически?


--------------------
user posted image
PM MAIL   Вверх
Бонифаций
Дата 11.4.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 9
Всего: 40



во первых сделайте после сборки

strip planet

Во вторых посмотрите свои mysql бибки(откуда они линкуются).  Если там только файлы с расширением .a - значит у вас mysql собран только со статическими клиентскими бибками.  Если там .so - значит можно собрать и динамически.

В третьих покажите  что выводит

ldd planet

Добавлено через 5 минут и 21 секунду
Судя по вопросу все таки слинковал?  smile 

Это сообщение отредактировал(а) Бонифаций - 11.4.2007, 13:36


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
bilbobagginz
Дата 11.4.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



не знаю чем и что ты компилируешь, у меня программа:
Код

/** mysql-test.c **/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <mysql/mysql.h>

int main (int argc, char **argv) {

  MYSQL mysql;
  if ( NULL == mysql_init(&mysql)) {
      printf ("\nFailed to initate MySQL connection");
      exit (1);
  }
  /*now you can call any MySQL API function you like */
  mysql_close (&mysql);
  exit(0);
}

компилируется строкой:
Код

gcc mysql-test.c -lz -lmysqlclient -o mysql-test


а в результате есть файл величиной в 7681 байт.

gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
libmysqlclient: 5.0.32-7etch1

надо нормальными дистрибутивами пользоваться smile


на самом деле, предполагаю, что собака зарылась в файле:
src/database.c

smile

ты же собираешь 2 файла в 1 экзешник.
посмотри какие там функции реализованы и т.д.

удачи.






--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Anton Vatchenko
Дата 11.4.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Всем спасибо. В итоге нашел пакет MySQL-shared, и размер файла упал до 4х кб.


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.