реклама на сайте
подробности

 
 
> GCC: линковка только нужных функций из собственных библиотек - решено
AlexeyVoroshen
сообщение Oct 6 2012, 21:56
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 19-08-10
Пользователь №: 59 015



Здравствуйте все.

Нашёл одну проблему при работе с GCC (yagarto(1206), kgp-arm-eabi_x86-32_20120427):
Мои проекты доросли до такого размера, когда уже хочется использовать собственные библиотеки.
Вот я и решил собрать STM32F4xx_StdPeriph_Driver как библиотеку libSTM32F4xx_StdPeriph_Driver.a.

Собирается хорошо. Работает. НО! Линкер тянет все функции из используемого obj файла в библиотете.

----------------------------------------------------------------------------
Библиотеку собираю так:

C_SOURCE = \
$(STDLIB_SRC_DIR)/src/misc.c \
$(STDLIB_SRC_DIR)/src/STM32F4xx_gpio.c \
$(STDLIB_SRC_DIR)/src/STM32F4xx_rcc.c \
.....

ALLFLAGS += \
-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard \
-Wall \
-ggdb \
-Os \
-MD -MP -MF $(OUTDIR)/.dep/$(@F).d \
-I inc \
-I . \
-I ./../CMSIS/Include \

AR_FLAGS = rcs $(PROJECT).a

-----------------------------------------------------------------
А программу так:

ALLFLAGS += \
-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard \
-Wall \
-ggdb \
-Os \
-MD -MP -MF $(OUTDIR)/.dep/$(@F).d \
-I inc \
-I . \
-I ./../CMSIS/Include \
.....

ALLFLAGS += -ffunction-sections -fdata-sections -Wl,--gc-sections

LINKER_FLAGS = -nostartfiles -Xlinker -o$(ELFDIR)/$(PROJECT).elf -Xlinker -M -Xlinker -Map=$(OUTDIR)/$(PROJECT).map

>>>>>>>> 1) LINKER_FLAGS += $(STDLIB_SRC_DIR)/libSTM32F4xx_StdPeriph_Driver.a
>>>>>>>> 2) C_SOURCE += $(STDLIB_SRC_DIR)/src/stm32f4xx_gpio.c

-----------------------------------------------------------------
Сама программа простейшая:

int main( void )
{
while( 1 ) {
GPIO_WriteBit( GPIOB, GPIO_Pin_4, Bit_SET );
GPIO_WriteBit( GPIOB, GPIO_Pin_4, Bit_RESET );
}
}

И получаю два варианта:
1) Используется libSTM32F4xx_StdPeriph_Driver.a
text data bss dec hex filename
2152 16 256 2424 978 ./Control4.elf

2) Используется C_SOURCE += $(STDLIB_SRC_DIR)/src/stm32f4xx_gpio.c
text data bss dec hex filename
536 0 256 792 318 ./Control4.elf

в map файле видно, что при подключении библиотеки тянутся все ненужные (в данном примере) функции
GPIO_Init, GPIO_ReadOutputDataBit и т.д.


Что я делаю не так??? Подскажите пожалуйста.


P.S. Про флаг -flto я знаю. С ним оптимизируется всё хорошо. Но мне надо что-бы работало и отлаживалось без него.

Сообщение отредактировал AlexeyVoroshen - Oct 7 2012, 19:47
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 10:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.03316 секунд с 7
ELECTRONIX ©2004-2016