Здравствуйте все.
Нашёл одну проблему при работе с 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 я знаю. С ним оптимизируется всё хорошо. Но мне надо что-бы работало и отлаживалось без него.