amobbs.com 阿莫电子论坛

 找回密码
 注册
bottom↓
查看: 249|回复: 66

linux下编写arm程序,使用arm-linux-gcc,c库函数怎么调用

[复制链接]
发表于 2012-9-15 22:13:33 | 显示全部楼层 |阅读模式
出现下面错误怎么解决
printf.c: In function 'vsprintk':
printf.c:184: warning: implicit declaration of function 'strlen'
printf.c:184: warning: incompatible implicit declaration of built-in function 'strlen'
arm-linux-ld -Tok6410.lds -o uart.elf start.o clock.o uart.o main.o printf.o
printf.o: In function `_do_div':
printf.c:(.text+0x4c): undefined reference to `__aeabi_uidiv'
printf.c:(.text+0x5c): undefined reference to `__aeabi_uidivmod'
printf.o: In function `vsprintk':
printf.c:(.text+0x4d8): undefined reference to `strlen'
make: *** [uart.bin] 错误 1
发表于 2012-9-15 22:19:52 | 显示全部楼层
include 相应头文件
 楼主| 发表于 2012-9-15 22:29:31 | 显示全部楼层
cqv 发表于 2012-9-15 22:19
include 相应头文件

说找不到头文件,,我怎么连接,还有连接到什么地方啊。
 楼主| 发表于 2012-9-15 22:32:38 | 显示全部楼层
error: string.h: No such file or directory
发表于 2012-9-16 10:51:38 | 显示全部楼层
#include <string.h>
找不到文件吗?
你的交叉编译环境OK了吗?
GCC的C库应该有string.h库可以用的。
 楼主| 发表于 2012-9-17 09:13:22 | 显示全部楼层
cqv 发表于 2012-9-16 10:51
#include
找不到文件吗?
你的交叉编译环境OK了吗?

我相应的文件夹能找到string.h这个文件,我怎么连接到我编译的程序中啊。include之后还需要做什么?
发表于 2012-9-17 22:06:42 | 显示全部楼层
编译看出现什么error,就是error: string.h: No such file or directory吗?
 楼主| 发表于 2012-9-18 09:50:46 | 显示全部楼层
cqv 发表于 2012-9-17 22:06
编译看出现什么error,就是error: string.h: No such file or directory吗?

是的  如果不添加这个头文件,就说strlen没有定义
发表于 2012-9-18 20:21:59 | 显示全部楼层
.......你重新搭建一个arm-linux-gcc环境试试吧。
标准的怎么会出现这些问题呢。
发表于 2012-9-21 13:28:21 | 显示全部楼层
我也遇到过,因为只包含头文件是不够的,还需要把实现头文件中声明的函数的库包含进来。
 楼主| 发表于 2012-9-25 12:30:22 | 显示全部楼层
zyp000 发表于 2012-9-21 13:28
我也遇到过,因为只包含头文件是不够的,还需要把实现头文件中声明的函数的库包含进来。 ...

具体怎么操作?
发表于 2012-9-25 13:04:44 | 显示全部楼层
确定一下你的是编译链是否有C库吧
如果有C库支持(glibc),有的话,只需要编译的时候加上 -lm 加载数学函数库就OK了。
有些编译链是没有C库的,同样能编译能链接,适合裸机程序的开发。

我当时自己创建裸机编译链的时候也遇到了同样的问题,当时做了点笔记,你可以看看吧,有没有帮助就不知道了。
--------------------------------------------------------------------------
裸机编译链不能有C库,所以很多东西就没有了

1,连接的时候要使用 LD ,而不能使用 GCC ,因为 GCC 默认会连接库 -lgcc ,而 LD 可以完全是裸机的,有多少代码只连接多少。

2,连接的时候不要标准库
LDFLAGS += -nostartfiles
LDFLAGS += -nostdlib

3,然后没有了标准库就没有了 printf 函数,于是只能自己移植,然而移植的过程中提示缺 __aeabi_idiv ,因为做了除法,但是系统没有库就悲剧,于是只能将这个库也移植。代码来自
linux代码中 \linux-2.6.22.6\arch\arm\lib\lib1funcs.S ,只需要将里面的 ENTRY(XX) 修改
为 .globl xxx 就OK了,表示到处标号。

只要搞定这个最重要的东东,其他的都是基本内容而已,一直按照经验移植就是了。

Etual
2012-3-25
发表于 2012-9-25 13:09:45 | 显示全部楼层
工具链不全?工具链需要安装到指定位置?
反正大多数情况是工具链的问题!
发表于 2012-9-25 13:15:21 | 显示全部楼层
楼主重新安装工具链试试吧。
发表于 2012-9-25 15:21:31 | 显示全部楼层
12楼正解哦。
发表于 2012-11-1 14:14:37 | 显示全部楼层
12楼强大,学习了
发表于 2012-11-2 10:22:22 来自手机 | 显示全部楼层
也有可能是权限的问题
发表于 2018-1-8 11:21:26 | 显示全部楼层
本帖最后由 alex315000 于 2018-1-8 13:30 编辑

需要自己实现 printfk函数

我现在遇到了这样的情况,裸机

需要用到 math.h 中的 sin cos sqrt等函数.

能否直接这样使用:
拷贝 /opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/usr/include/math.h到 {projectname}/include 文件夹

mian.c
#include “math.h”
main()
{
***
a=cos(PI);

***
}
编译时加上
arm-linux-gcc ***** -L/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/usr/lib/libm.a

math.h内报错。。。。






发表于 2018-3-22 17:06:55 | 显示全部楼层
好贴,经验之谈啊
发表于 2018-4-24 09:36:21 | 显示全部楼层
-L编译的时候加上链接库路径就好了
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号-1 )

GMT+8, 2020-4-6 22:58

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表