TrueStudio - Почему происходит сбой статической библиотеки ссылок? - PullRequest
0 голосов
/ 15 марта 2019

Я использую TrueStudio для моего собственного проекта stm32.Я создаю 2 файла foo.h и foo.c включает в себя 2 функции

//foo.h
int add(int a, int b);
int sub(int a, int b);

и реализацию timeout

//foo.c
#include "foo.h"

int add(int a, int b)
{
  return a + b;
}

int sub(int a, int b)
{
  return a - b;
}

После этого я использовал gcc для компиляции статической библиотеки foo.а.Я продолжаю делать основной файл для реализации библиотеки для тестирования.

//main.c
#include <stdio.h>
#include "foo.h"

int main(int argc, const char *argv[])
{
  int a = 100, b = 50;

  printf("sum is: %d\n", add(a,b));
  printf("sub is: %d\n", sub(a,b));

  return 0;
}

Далее я связываю статическую библиотеку foo с main.c, чтобы сделать исполняемый файл с помощью команды

gcc main.c foo.a -o main

Я запустил его и получил результат

sum is: 150
sub is: 50

Это сработало, докажите, что моя статическая библиотека была успешно построена.Я начинаю создавать проект stm32 из stmcubeMX и компоновщика для этого foo.a, и появляется ошибка.

undefined reference to 'add'
undefined reference to 'sub'

Мой полный код, настройка пути и сборка ниже

//main.c in TrueStudio
#include "main.h"
#include "foo.h"

int main(void)
{
  HAL_Init();

  SystemClock_Config();

  int a = 200, b = 100;
  int _sum, _sub;

  _sum = add(a, b);
  _sub = sub(a, b);

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
}

enter image description here

enter image description here

Я очень благодарен за любую помощь, спасибо!

1 Ответ

0 голосов
/ 15 марта 2019

Переименуйте ваш foo.a файл в libfoo.a, затем измените C Linker -> Библиотеки -> Библиотеки на foo, чтобы ничего не было впереди или сзади.Это должно привести к тому, что конечный результат будет -lfoo, что, в свою очередь, заставит компоновщик искать libfoo.a в путях поиска в библиотеке.

...