我在我自己的stm32项目中使用TrueStudio。我创建了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和链接器到这个foo.a的项目stm32,错误出现了。
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 */
}
}


非常感谢您的帮助,谢谢!
发布于 2019-03-15 16:03:13
将您的foo.a文件重命名为libfoo.a,然后将C Linker -> Libraries -> Libraries更改为just foo,前后没有任何内容。这将导致最终输出为-lfoo,这反过来会导致链接器在库搜索路径中搜索libfoo.a。
https://stackoverflow.com/questions/55174649
复制相似问题