Перейти к содержанию
    

arm-none-eabi-gcc ну видит стандартную библиотеку

Доброго времени суток. Пытаюсь собрать прошивку под мк из командной строки. Линковщик почему-то не видит стандартную библиотеку и завершается с ошибками:

 

/opt/arm/gcc-arm-none-eabi-10.3-2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld: app.o: in function `shiftQueue':
app.c:152: undefined reference to `__aeabi_idivmod'
/opt/arm/gcc-arm-none-eabi-10.3-2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld: app.o: in function `clearqueue':
app.c:180: undefined reference to `__aeabi_idivmod'
/opt/arm/gcc-arm-none-eabi-10.3-2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld: app.o: in function `assignReactSint32':
app.c:379: undefined reference to `sprintf'
/opt/arm/gcc-arm-none-eabi-10.3-2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld: app.o: in function `assignReactSfloat32':
app.c:403: undefined reference to `__aeabi_fcmpeq'
/opt/arm/gcc-arm-none-eabi-10.3-2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld: app.o: in function `assignReactSfloat64':
app.c:407: undefined reference to `__aeabi_dcmpeq'
collect2: error: ld returned 1 exit status

Собираю так:
 

arm-none-eabi-gcc -I /opt/arm -I /opt/arm/lib -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -DSTM32 -DSTM32F0 -DSTM32F072xB -DDEBUG -O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c app.c -o app.o


Линкер (UPD):
 

arm-none-eabi-gcc -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -specs=nano.specs -T /opt/arm/lib/dio-022m.ld -Wl,--gc-sections -lm -o app.elf


Как правильно указать, что ненайденные функции лежат в стандартной библиотеке?
Заранее благодарен за ответы.

Изменено пользователем ev_zubkov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/25/2022 at 11:35 AM, ev_zubkov said:

Линковщик почему-то не видит стандартную библиотеку и завершается с ошибками:

У вас команда запуска линковщика не верная. Она у вас является копией вызова компилятора.

Для линковщика должно быть примерно так.

arm-none-eabi-gcc app.o   -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -Wl,-Map=app.map,--cref -Wl,--gc-sections -o app.elf

Может быть вам не стоит пока задавать пути для включаемых файлов. Вот эти

-I /opt/arm 
-I /opt/arm/lib

Попробуйте так

arm-none-eabi-gcc -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -DSTM32 -DSTM32F0 -DSTM32F072xB -DDEBUG -O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c app.c -o app.o

А вообще, все должно компилироваться без указания стандартных библиотек. Компилятор про свои библиотеки и так все знает.

А где вы компилятор взяли ?

Не сами собирали случайно ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 25.07.2022 в 17:24, dimka76 сказал:

У вас команда запуска линковщика не верная. Она у вас является копией вызова компилятора.

Для линковщика должно быть примерно так.

Пардон, криво скопировал. Команда выглядит так:
 

arm-none-eabi-gcc -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -specs=nano.specs -T /opt/arm/lib/dio-022m.ld -Wl,--gc-sections -lm -o app.elf

 

Убрал включаемые пути - результат тот же.

 

В 25.07.2022 в 17:24, dimka76 сказал:

А где вы компилятор взяли ?

Не сами собирали случайно ?

Брал отсюда: https://developer.arm.com/downloads/-/gnu-rm

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/25/2022 at 1:48 PM, ev_zubkov said:
arm-none-eabi-gcc -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -specs=nano.specs -T /opt/arm/lib/dio-022m.ld -Wl,--gc-sections -lm -o app.elf

В вашей строке не хватает app.o

 

On 7/25/2022 at 1:48 PM, ev_zubkov said:

Убрал включаемые пути - результат тот же.

У меня версия 2020-q2-update под виндой нормально компилирует

Spoiler
#include <stdint.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
#include <sys/times.h>

extern int errno;

int _kill(int pid, int sig)
{
	errno = EINVAL;
	return -1;
}

void _exit (int status)
{
	_kill(status, -1);
	while (1) {}		/* Make sure we hang here */
}

int64_t shiftQueue(int64_t x, int64_t y)
{
	return x/y;
};

float assignReactSfloat32(float f1, float f2)
{
	float f3 = f1 * f2;
	
	f3 -= f2;
	
	return f3;
};

volatile float fa1, fb2;
volatile int64_t tt;

int main(void)
{
	tt = 345677LL;
	fa1 = 0.002f;
	fb2 = 34.567f;
	
	shiftQueue(tt, 45LL);
	
	fb2 = assignReactSfloat32((float)tt, fa1);
	tt = (int64_t)assignReactSfloat32(fb2, fa1);
	
	return 0;
}

 

Запускаю так

arm-none-eabi-gcc -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -DSTM32 -DSTM32F0 -DSTM32F072xB -DDEBUG -O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c app.c -o app.o
arm-none-eabi-gcc app.o -mcpu=cortex-m0 -mthumb -mfloat-abi=soft -specs=nano.specs -Wl,--gc-sections -lm -o app.elf

У меня вашего файла dio-022m.ld нет, поэтому запускаю без него.

On 7/25/2022 at 1:48 PM, ev_zubkov said:

Я так понимаю, что у вы под Линуксом работаете ?

Может сборка под линукс с багами.

 

Все нужные библиотечные функции в итоге включены в выходной файл

 

app.lss app.map

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/25/2022 at 6:35 PM, ev_zubkov said:

Линковщик почему-то не видит стандартную библиотеку и завершается с ошибками:

 

Такое бывает, если либа собиралась другим тулчейном и несовместима с текущим.  Или под другой таргет собиралась.  Уже было такое 100 раз.

Как вариант можно попробовать указать либу вместе с объектниками на этапе сборки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 25.07.2022 в 18:07, dimka76 сказал:

В вашей строке не хватает app.o

Вы правы, собственно основная проблема была в этом. Была еще одна, связанная с syscalls.c, решилась с помощью гугла.

Всем спасибо за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...