关于undefined reference to一些问题的解决


①undefined reference to `pow‘

②undefined reference to `crypt‘

一般编译使用

aarch64-linux-gnu-gcc  usb.c -o  usb

更改为

aarch64-linux-gnu-gcc  usb.c -o  usb -l wiringPi -l crypt -lm

①添加-lm

②添加 -l crypt

如果添加了wiringPi库文件提示wiringPi.h中函数未定义,添加-l wiringPi。

​lm的意思是library math
查看/lib或/usr/lib。 这些库都被命名为lib.a或lib.so。是-l之后的引用的库名。 在这种情况下,数学库名为libm.so,因此我们称之为-lm。

参考:https://blog.youkuaiyun.com/qq_34626094/article/details/113118463

### C语言中 `undefined reference to` 错误解决方案 #### 函数未定义 当遇到 `undefined reference to` 的错误提示时,可能是因为目标函数并未被定义。确保所有使用的函数都在源码中有实现[^1]。 ```c // 示例:确保 main.c 中有 foo() 实现 void foo() { printf("Function is defined\n"); } ``` #### 链接时缺少对象文件 如果项目由多个源文件组成,则需确认链接阶段包含了所有的 `.o` 或者 `.obj` 文件。遗漏任何必要的对象文件都会引发此类错误。 #### 缺失库文件 对于标准库之外的功能调用,比如网络编程中的 socket API ,应该指定相应的外部库来提供这些功能的支持。例如,在 Linux 下使用 `-lsocket` 参数;而在 Windows 平台上则可能是 winmm.lib 这样的媒体控制接口库[^2]。 #### 动态/静态库问题 某些情况下,程序试图访问位于共享库 (.so, .dll) 或者静态库 (.a, .lib) 内部的符号却失败了。这通常意味着编译器无法找到所需的库路径或者是版本冲突所致。检查并修正项目的依赖配置可以解决问题。 #### 库链接顺序不当 在 GCC/G++ 命令行里添加库的时候要注意它们之间的相对位置关系。因为链接过程是从左向右依次处理输入项,所以应当把自定义模块放在第三方库之前。 #### 跨平台开发注意事项 不同操作系统上相同名称但行为有所差异的标准库也可能造成此现象。特别是移植代码至新环境时要特别留意这一点。 #### 不兼容的 ABI (应用程序二进制接口) 有时即使两个库都实现了同样的接口,但由于内部数据结构布局的不同也会导致类似的连接期故障。此时建议升级工具链或尝试寻找更稳定的替代品。 #### 名称修饰差异 C++ 和其他一些高级语言会对导出的名字做额外编码(即所谓的 "name mangling"),而纯 C 则不会这样做。因此混合编程环境下容易发生匹配不上原始声明的情形。可以通过 extern “C” 来强制保持一致性的命名约定。 #### 符号可见性设置 最后还有一种情况是在构建过程中有意隐藏了一些全局变量或方法从而阻止外界直接引用。查阅文档了解如何调整相关属性以便让特定条目对外界可用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷糊的鱼(。・ω・。)ノ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值