我正在用“-nostdlib”编译下面的代码。我的理解是arm none eabi gcc不会在“crt0.o”中使用“u start”,但它将使用用户定义的“u start”。为此,我希望创建一个start.S文件,并放置开始符号。
但是如果我编译下面显示的代码时没有从我这边定义的开始符号,我就不会收到任何警告。我期待着“警告:找不到入口符号”开始
问题:
1)为什么我没有收到警告?海合会从哪里得到的开始符号?
2)如果gcc从某个地方得到了一个文件的开始符号,你能告诉我如何让gcc使用从我的开始文件开始的开始符号吗?
$cat测试.c

int main()
{
    volatile int i=0;
    i = i+1;

    return 0;
}

$cat链接器.ld
MEMORY
{
    ram : ORIGIN = 0x8000, LENGTH = 20K
}

SECTIONS
{
    .text : { *(.text*) } > ram
    .bss : { *(.bss*) } > ram
}

$arm none eabi gcc-Wall-Werror-O2-mfpu=neon-vfpv4-mfloat abi=hard-march=armv7-a-mtune=cortex-a7-nostdlib-T linker.ld test.c-o test.o
$arm none eabi gcc—版本
arm none eabi gcc(arm嵌入式处理器的GNU工具)4.9.3 20150529>(发行版)[arm/Embedded-4_9-branch revision 224288]

最佳答案

编译并链接到arm-none-eabi-gcc -v -Wall -Werror -O2。。。。要了解编译器正在做什么(以及它正在使用的crt0是什么;crt0可能有一个_start调用您的main,而且_start可能是链接器的默认入口点)
请注意,-nostdlib与(缺少)C standard library有关;也许您希望在独立环境中编译(请参见this),然后use -ffreestanding(在这种情况下,main没有特殊意义,您需要定义您的启动函数,并且除了malloc之外,没有像printfsetjmp这样的标准C函数可用)。
阅读C99标准草案。它解释了第5.1.2.1节中独立式的含义

关于c - 为什么arm-none-eabi-gcc不搜索我的自定义_start符号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33277565/

10-13 07:31
查看更多