-
- если вы такой умный, зачем тут тогда такую ерунду спрашиваете? bialix(525 знак., 26.02.2009 23:42)
- Воообще-то под библиотечным файлом я подразумевал несобранный в библиотеку сишный модуль. Нормальные компиляторы не линкуют функции из него, если они не вызываются в main-е. C++(245 знак., 02.03.2009 09:34)
- GCC - это запущенный случай? Alex B.(276 знак., 27.02.2009 00:00)
- Кажется эту часть дискусии пора отпочковывать. Исходный компилятор, как я понял, не gcc. - Сергей Борщ(28.02.2009 15:59)
- не понимаю вопроса. простой контрпример bialix(152 знак., 27.02.2009 01:03)
- Такого не будет. foo() содержит ссылку на bar(), значит если прилинкован foo(), то будет прилинкован и bar(). - Сергей Борщ(27.02.2009 12:47)
- Alex B. дал ссылку на совет ReAl о том, чтобы заставить gcc функции выделять в отдельные подмодули. Такое не проканает, если есть статические функции. Да/нет/незнаю? - bialix(27.02.2009 23:13)
- Почему не проканывает? У статической функции область видимости ограничена единицей компиляции. В остальном это такая же функция. - Сергей Борщ(28.02.2009 15:33)
- Alex B. дал ссылку на совет ReAl о том, чтобы заставить gcc функции выделять в отдельные подмодули. Такое не проканает, если есть статические функции. Да/нет/незнаю? - bialix(27.02.2009 23:13)
- имеется в виду, что если модуль собран в библиотеку, Alex B.(120 знак., 27.02.2009 10:00)
- и этому есть свое объяснение: обработчики прерываний. - bialix(27.02.2009 23:04)
- это не объяснение. Линкер должен строить дерево вызовов, а обработчик прерывания такая же функция. Или я чего-то не понял? Alex B.(193 знак., 28.02.2009 02:18)
- Там все несколько иначе. Подлинковываются целиком входные секции (input sections). В одной секции может быть одна функция, а может быть и несколько. Сергей Борщ(1842 знак., 28.02.2009 15:57)
- это не объяснение. Линкер должен строить дерево вызовов, а обработчик прерывания такая же функция. Или я чего-то не понял? Alex B.(193 знак., 28.02.2009 02:18)
- и этому есть свое объяснение: обработчики прерываний. - bialix(27.02.2009 23:04)
- Такого не будет. foo() содержит ссылку на bar(), значит если прилинкован foo(), то будет прилинкован и bar(). - Сергей Борщ(27.02.2009 12:47)
- "Довольно мало" - а какие не умеют? Мне вроде не попадалось. - she(27.02.2009 00:04)
- я вот тут читал. Мне вот микрочиповский C30 попался, сцуко Alex B.(44 знак., 27.02.2009 00:16, ссылка)
- Из того, что есть под руками - winavr, cce для msp-шек - умеют. avr32-шный тоже, ЕМНИП. Про армовые не помню =( - she(27.02.2009 00:23)
- речь идет про линковку из библиотеки? из исходников конечно же берутся только вызываемые функции - Alex B.(27.02.2009 10:02)
- а я вообще не сталкивался с теми, кто из библиотеки берут модуль и отсекают неиспользуемые ф-ции из модуля. линкуется именно модуль из либы, со всем, что там есть - ф-ции, переменные. - jaga-jaga(27.02.2009 13:17)
- Мда, туплю, не уловил. Видимо таки да, gcc - запущенный случай =) - she(27.02.2009 11:50)
- Что запущено??? Сергей Борщ(392 знак., 27.02.2009 13:02)
- Спасиба, в курсе. Это ж еще и либа должна быть собрана соответствующим образом. she(52 знак., 27.02.2009 12:58)
- Библиотечные либы собраны правильно. Сергей Борщ(220 знак., 27.02.2009 13:02)
- -ffunction-sections - это все таки костыль. Если каждая функция лежит в своей секции, то как проконтролировать общий объем, который либа занимает в исполняемом файле? - Alex B.(27.02.2009 13:14)
- А как его контролировать, если либа лежит в секции .text? - Сергей Борщ(27.02.2009 23:07)
- елки, а что мешает класть либу в отдельную секцию? Если линкер без всяких костылей умеет брать из секции только вызываемые функции, то все очень красиво. Alex B.(188 знак., 28.02.2009 02:07)
- Так кладите. ld складывает входные секции в выходные секции. Сложите все входные секции вашей библиотеки в отдельную выходную секцию. И увидите ее размер. Сергей Борщ(255 знак., 28.02.2009 16:09, ссылка)
- ЗЫ. про IAR - не скажу, пробовал, когда начинал половую жизнь с ARM-ами. Сейчас использую Keil - Alex B.(02.03.2009 10:01)
- Я знаю, что такое входные, а что такое выходные секции. И так и приходится делать - каждая функция в своей входной секции линкуется в одну выходную секцию для всей библиотеки. Alex B.(34 знак., 28.02.2009 16:26)
- "Меньше геморроя" - как вы себе это представляете, и что у ИАРа в этом смысле лучше? Сергей Борщ(65 знак., 02.03.2009 14:11)
- Так кладите. ld складывает входные секции в выходные секции. Сложите все входные секции вашей библиотеки в отдельную выходную секцию. И увидите ее размер. Сергей Борщ(255 знак., 28.02.2009 16:09, ссылка)
- елки, а что мешает класть либу в отдельную секцию? Если линкер без всяких костылей умеет брать из секции только вызываемые функции, то все очень красиво. Alex B.(188 знак., 28.02.2009 02:07)
- А как его контролировать, если либа лежит в секции .text? - Сергей Борщ(27.02.2009 23:07)
- -ffunction-sections - это все таки костыль. Если каждая функция лежит в своей секции, то как проконтролировать общий объем, который либа занимает в исполняемом файле? - Alex B.(27.02.2009 13:14)
- Библиотечные либы собраны правильно. Сергей Борщ(220 знак., 27.02.2009 13:02)
- Спасиба, в курсе. Это ж еще и либа должна быть собрана соответствующим образом. she(52 знак., 27.02.2009 12:58)
- Что запущено??? Сергей Борщ(392 знак., 27.02.2009 13:02)
- речь идет про линковку из библиотеки? из исходников конечно же берутся только вызываемые функции - Alex B.(27.02.2009 10:02)
- Из того, что есть под руками - winavr, cce для msp-шек - умеют. avr32-шный тоже, ЕМНИП. Про армовые не помню =( - she(27.02.2009 00:23)
- я вот тут читал. Мне вот микрочиповский C30 попался, сцуко Alex B.(44 знак., 27.02.2009 00:16, ссылка)
- если вы такой умный, зачем тут тогда такую ерунду спрашиваете? bialix(525 знак., 26.02.2009 23:42)