code blocks 新建静态库工程 在其他项目中链接导入静态库 编译,解决: undefined reference to xxx

先说下我出现的问题 undefined reference to xxx 的原因: 编译器选择不对,开发板代码 编译器工具 和 静态库工程的编译器 不一致。下面会具体介绍 怎么选择静态库编译器

这个编译器不对问题 我在看网上博客文章 介绍 静态库创建 和 导入的 相关文章 基本上没有看到强调的,所以在最开头写出来 作为强调.

静态库 动态库 区别

静态库 (扩展名为 .a 或 .lib) 是包含函数的文件,用于在link阶段整合执行程序,动态链接库(扩展名 .dll)是不在link阶段整合进执行程序中的。DLL文件在执行阶段动态调用。

嵌入式开发 我只见到用 静态库

先确认要创建的静态库工程需要用到的编译器

code blocks 打开要使用静态库的 项目工程, 然后右键项目 -> Build options
在这里插入图片描述
可以看到我的这个工程项目 输出 release 版本,Selected compiler 编译器 是 “PI32V2 r3 Ito Compiler”
在这里插入图片描述

Code::Blocks 创建静态库

File -> New -> Project -> Static library -> Go
在这里插入图片描述
输入静态库工程名,我这里随便填的 testlib
在这里插入图片描述

这一步 很重要 ,我上面在导入静态库 报错 undefined reference to xxx,就是这一步 编译器 选择错了。
在上面我已经查看了 我的开发板项目工程 编译器 Compiler 是 “PI32V2 r3 Ito Compiler”
在这里插入图片描述

注:code blocks中如果有多个项目,切换项目 :右键要选择的项目 -> Activate project

静态库工程 删除了 默认创建的main.c文件 , 新建了2个文件 hello.c 和 hello.h,如下图:

在工程目录下新建文件hello.c hello.h,然后在code blocks编辑器上右键静态库项目->Add files 添加刚才创建的文件

在这里插入图片描述
hello.c

#include "hello.h"

int SampleFunction1()
{
    return 110;
}

hello.h

#ifndef __HELLO_H
#define __HELLO_H


#ifdef __cplusplus
extern "C" {
#endif

int SampleFunction1();

#ifdef __cplusplus
}
#endif

#endif

编译生成静态库
点 编译图标 或者 菜单栏 Build -> Build
注意:生成库版本 Release

在这里插入图片描述
编译成功后就可以在相应目录下找到 静态库文件 libtestlib.a
在这里插入图片描述

在其他工程项目中 导入 静态库

切换到要使用静态库的工程 (如果有多个项目在code blocks,右键要切换的项目 -> Activate project) 后
在这里插入图片描述
导入静态库
Settings -> Compiler
在这里插入图片描述

左边栏 选择 Global compiler settings , 右上边的 Selected compiler 选择 对应的编译器版本(上面已经知道),Linker settings 栏 点击 Add 添加静态库

在这里插入图片描述
下面介绍 在代码中调用静态库方法

将前面创建的静态库 头文件 hello.h 拷贝到 当前要使用静态库的工程中 (放到哪,自己看着办)
在要使用这个静态库方法的文件中 先include 头文件,然后 就可以调用 静态库中的方法了

xxx.c

//xxx

//静态库方法 头文件
#include "hello.h"

//xxx

void test(){

	SampleFunction1(); //调用静态库方法

}

编译项目 Build -> Build
在这里插入图片描述
如果不报错 ,那么就到此结束了 ,可以去体验了

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值