Re: How to omit libc (newlib) on bare metal (freestanding)?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 22 Feb 2023, 09:02 Jonathan Wakely, <jwakely.gcc@xxxxxxxxx> wrote:

>
>
> On Tue, 21 Feb 2023, 23:32 Josef Wolf, <jw@xxxxxxxxxxxxx> wrote:
>
>> Hello all,
>>
>> I am trying to build for a bare metal target without any OS support and I
>> want
>> to omit libc (newlib).
>>
>
>
> Do you mean you're trying to build GCC itself, or you're trying to build
> your own program?
>
>
>
>> So I add
>>
>>    -ffunction-sections -nostdlib -ffreestanding
>>
>> flags to assembler/compiler and
>>
>>    -lnosys -nolibc -nodefaultlibs -nostartfiles -nostdlib -ffreestanding
>>    -static-libgcc -lgcc  -lnosys -nolibc -nodefaultlibs -nostartfiles
>>    -nostdlib -ffreestanding -static-libgcc -lgcc
>>
>> to linker
>
>
> Please show the full commands you're using
>
> If you add -v to the gcc command it will show exactly what it's doing.
>

Oh actually I see the problem. You're using -lgcc and your gcc was
configured to use newlib, so libgcc depends on newlib.



>
>
>
>
>
>
>>
>>
>> But gcc still tries to pull newlib:
>>
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/bin/ld:
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a(lib_a-init.o):
>> in function `__libc_init_array':
>> /var/tmp/builds/crossgcc/src/newlib-3.1.0/newlib/libc/misc/init.c:40:
>> undefined reference to `_init'
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/bin/ld:
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a(lib_a-sbrkr.o):
>> in function `_sbrk_r':
>> /var/tmp/builds/crossgcc/src/newlib-3.1.0/newlib/libc/reent/sbrkr.c:51:
>> undefined reference to `_sbrk'
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/bin/ld:
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a(lib_a-writer.o):
>> in function `_write_r':
>> /var/tmp/builds/crossgcc/src/newlib-3.1.0/newlib/libc/reent/writer.c:49:
>> undefined reference to `_write'
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/bin/ld:
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a(lib_a-closer.o):
>> in function `_close_r':
>> /var/tmp/builds/crossgcc/src/newlib-3.1.0/newlib/libc/reent/closer.c:47:
>> undefined reference to `_close'
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/bin/ld:
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a(lib_a-lseekr.o):
>> in function `_lseek_r':
>> /var/tmp/builds/crossgcc/src/newlib-3.1.0/newlib/libc/reent/lseekr.c:49:
>> undefined reference to `_lseek'
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/bin/ld:
>> /m/a/local/crossgcc/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/9.3.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc.a(lib_a-readr.o):
>> in function `_read_r':
>> /var/tmp/builds/crossgcc/src/newlib-3.1.0/newlib/libc/reent/readr.c:49:
>> undefined reference to `_read'
>> collect2: error: ld returned 1 exit status
>>
>> So what is the magic option to tell gcc not to mess around with libc
>> (newlib)?
>>
>> Thanks!
>>
>>
>>



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux