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

时间:2019-03-15 02:18:48

标签: linker stm32 truestudio

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

// .eslintrc.js
const path = require('path')

module.exports = {
  env: {
    browser: true,
    es6: true,
    jest: true
  },
  extends: [
    'airbnb-base',
    'plugin:vue/recommended',
    'plugin:vue-types/strongly-recommended',
    'plugin:prettier/recommended',
    '@vue/prettier'
  ],
  globals: {
    Atomics: 'readonly',
    SharedArrayBuffer: 'readonly'
  },
  parserOptions: {
    ecmaVersion: 2018,
    sourceType: 'module'
  },
  plugins: ['prettier', 'vue'],
  rules: {
    'prettier/prettier': 'error',
    'no-console': 0,
    'import/prefer-default-export': 0,
    'import/no-unresolved': 0,
    'vue/max-attributes-per-line': 0
  }
}

和超时的实现

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

之后,我用gcc编译了一个静态库foo.a。我继续制作主文件以实施要测试的库。

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

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

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

接下来,我将静态foo lib链接到main.c以使用命令is创建一个可执行文件

//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;
}

我运行它并得到结果

gcc main.c foo.a -o main

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

sum is: 150
sub is: 50

我的完整代码和设置路径并建立波纹管

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

enter image description here

enter image description here

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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