arm-none-eabi-ld malloc undefined reference

时间:2014-10-14 12:47:53

标签: c malloc microcontroller texas-instruments cortex-m

我正在研究德州仪器的一些代码' Tiva C系列TMC123G Launchpad(ARM Cortex M4 MCU板),我的代码由于undefined reference to 'malloc'而无法编译。 startup_gcc.c和project.ld是TivaWare的一部分。可以找到等效文件here:

  • /src/startup_gcc.c
  • /TM4C123GH6PM.ld

在构建时我的控制台输出:

arm-none-eabi-gcc -o build/minimal.o src/minimal.c -g -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -Os -ffunction-sections -fdata-sections -MD -std=c99 -Wall -pedantic -DPART_TM4C123GH6PM -c -DTARGET_IS_BLIZZARD_RA1 -Dgcc -DF_CPU=80000000L -Isrc -Ilibraries -I/home/jakob/opt/tivaware
arm-none-eabi-gcc -o build/startup_gcc.o /home/jakob/opt/tivaware/examples/project/startup_gcc.c -g -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -Os -ffunction-sections -fdata-sections -MD -std=c99 -Wall -pedantic -DPART_TM4C123GH6PM -c -DTARGET_IS_BLIZZARD_RA1 -Dgcc - DF_CPU=80000000L -Isrc -Ilibraries -I/home/jakob/opt/tivaware
arm-none-eabi-ld -o build/a.out build/minimal.o build/startup_gcc.o -T /home/jakob/opt/tivaware/examples/project/project.ld --entry ResetISR --gc-sections
build/minimal.o: In function `Struct_begin':
/home/jakob/TivaMallocProblemMini/src/minimal.c:29: undefined reference to `malloc'
Makefile:66: recipe for target 'build/a.out' failed
make: *** [build/a.out] Error 1

以下是问题的最小示例, malloc函数中的main似乎不会导致任何问题,只有Struct_begin函数中的问题。< / strike>(它被优化了。)

#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>

typedef struct s_Struct
{
    int16_t param;
} Struct;

Struct* Struct_begin(int16_t param);

int main() {
    Struct* s;

    s = malloc(sizeof(Struct));
    free(s);

    s = Struct_begin(10);
    s->param=0;

    for(;;);

    return EXIT_SUCCESS;
}

Struct* Struct_begin(int16_t param) {
    Struct* s;

    s = malloc(sizeof(Struct));
    s->param = param;

    return s;
}

1 个答案:

答案 0 :(得分:3)

您正在使用嵌入式平台。在这些情况下,GCC(或更确切地说是ld)可能不会自动链接到标准C库。您可能需要明确需要链接到平台的标准库,或者您可能需要提供自己的malloc实现。