首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TrueStudio -为什么链接静态库失败?

TrueStudio -为什么链接静态库失败?
EN

Stack Overflow用户
提问于 2019-03-15 10:18:48
回答 1查看 664关注 0票数 0

我在我自己的stm32项目中使用TrueStudio。我创建了2个foo.h文件,foo.c包含2个函数

代码语言:javascript
复制
//foo.h
int add(int a, int b);
int sub(int a, int b);

以及超时的实现

代码语言:javascript
复制
//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。我继续制作主文件来实现要测试的库。

代码语言:javascript
复制
//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以生成可执行文件

代码语言:javascript
复制
gcc main.c foo.a -o main

我运行它,得到的结果是

代码语言:javascript
复制
sum is: 150
sub is: 50

这很好地证明了我的静态库是成功构建的。我开始创建一个从stmcubeMX和链接器到这个foo.a的项目stm32,错误出现了。

代码语言:javascript
复制
undefined reference to 'add'
undefined reference to 'sub'

我的完整代码、设置路径和构建如下

代码语言:javascript
复制
//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 */
  }
}

非常感谢您的帮助,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-03-15 16:03:13

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55174649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档