linux下编写arm程序,使用arm-linux-gcc,c库函数怎么调用
出现下面错误怎么解决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: *** 错误 1 include 相应头文件 cqv 发表于 2012-9-15 22:19 static/image/common/back.gif
include 相应头文件
说找不到头文件,,我怎么连接,还有连接到什么地方啊。 error: string.h: No such file or directory #include <string.h>
找不到文件吗?
你的交叉编译环境OK了吗?
GCC的C库应该有string.h库可以用的。 cqv 发表于 2012-9-16 10:51 static/image/common/back.gif
#include
找不到文件吗?
你的交叉编译环境OK了吗?
我相应的文件夹能找到string.h这个文件,我怎么连接到我编译的程序中啊。include之后还需要做什么? 编译看出现什么error,就是error: string.h: No such file or directory吗?
cqv 发表于 2012-9-17 22:06 static/image/common/back.gif
编译看出现什么error,就是error: string.h: No such file or directory吗?
是的如果不添加这个头文件,就说strlen没有定义 .......你重新搭建一个arm-linux-gcc环境试试吧。
标准的怎么会出现这些问题呢。 我也遇到过,因为只包含头文件是不够的,还需要把实现头文件中声明的函数的库包含进来。 zyp000 发表于 2012-9-21 13:28 static/image/common/back.gif
我也遇到过,因为只包含头文件是不够的,还需要把实现头文件中声明的函数的库包含进来。 ...
具体怎么操作? 确定一下你的是编译链是否有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 工具链不全?工具链需要安装到指定位置?
反正大多数情况是工具链的问题! 楼主重新安装工具链试试吧。 12楼正解哦。 12楼强大,学习了 也有可能是权限的问题 本帖最后由 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内报错。。。。
好贴,经验之谈啊 -L编译的时候加上链接库路径就好了
页:
[1]