0

我将 TrueStudio 用于我自己的 stm32 项目。我创建了 2 个文件 foo.h 和 foo.c 包含 2 个函数

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

以及超时的实现

//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.a。我继续制作主文件来实现库来测试。

//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 lib 链接到 main.c 以使用以下命令生成可执行文件

gcc main.c foo.a -o main

我运行它并得到结果是

sum is: 150
sub is: 50

效果很好,证明我的静态库已成功构建。我开始从 stmcubeMX 和链接器创建一个项目 stm32 到这个 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 */
  }
}

在此处输入图像描述

在此处输入图像描述

我非常感谢任何帮助,谢谢!

4

1 回答 1

1

foo.a文件重命名为libfoo.a,然后将 C Linker -> Libraries -> Libraries 更改为foo前面或后面没有任何内容。这应该会导致最终输出为-lfoo,这反过来会导致链接器libfoo.a在库搜索路径中进行搜索。

于 2019-03-15T08:03:13.253 回答