QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1124|回复: 7

紧急求教!!关于编译连接的问题!!多谢了!!

[复制链接]
发表于 2005-4-13 13:20:49 | 显示全部楼层 |阅读模式
小妹刚刚着手嵌入式,还有多多不懂,请各位大侠指教!!多谢
最近想把msntp(是基于pclinux的程序)移植到uClinux下去,但是好像编译连接总是有问题,之前的Makefile是这样的:
CFLAGS += -DLOCKNAME='"/var/run/msntp.pid"' -DSAVENAME='"/var/run/msntp.state"
'
all: msntp
clean:
        rm -f msntp msntp-1.5.tar.gz *~ *.o core *.gdb
msntp: main.o unix.o internet.o socket.o timing.o
        $(CC) $(LDFLAGS) -o msntp main.o unix.o internet.o socket.o timing.o
$(LIBS) $(LDLIBS)
main.o: main.c header.h kludges.h
unix.o: unix.c header.h kludges.h
internet.o: internet.c header.h internet.h kludges.h
socket.o: socket.c header.h internet.h kludges.h
timing.o: timing.c header.h kludges.h

我自己添加了:
LIBS = -lm(这个是前面的注释好像说是这么加的哦,能问一下是什么意思吗?)
CC = arm-elf-gcc
LDFLAGS += -Wl,-elf2flt
romfs:
         $(ROMFSINST) /bin/msntp

最后总体make之后就错,但是在printf.c中明明是有include <stdlib.h>,那个头文件中也
定义了gcvt啊,是不是连接的路径还是其他什么问题,多谢大侠指教了哦!!!!

arm-elf-gcc -Os  -Dlinux -D__linux__ -Dunix -D__uClinux__ -DEMBED -I/home/sunq
/uclinux/uClinux-dist/lib/libc/include -I/home/sunq/uclinux/uClinux-dist/lib/l
ibm -I/home/sunq/uclinux/uClinux-dist -fno-builtin -nostartfiles -I/home/sunq/
uclinux/uClinux-dist/linux/include -Wl,-elf2flt /home/sunq/uclinux/uClinux-dis
t/lib/libc/crt0.o -Wl,-elf2flt -o msntp main.o unix.o internet.o socket.o timi
ng.o -lm -L/home/sunq/uclinux/uClinux-dist/lib/libc/. -L/home/sunq/uclinux/uClinux-
dist/lib/libc/lib -L/home/sunq/uclinux/uClinux-dist/lib/libm -L/home/sunq/ucli
nux/uClinux-dist/lib/libnet -L/home/sunq/uclinux/uClinux-dist/lib/libdes -L/ho
me/sunq/uclinux/uClinux-dist/lib/libpcap -L/home/sunq/uclinux/uClinux-dist/lib
/libssl -lc
msntp.elf2flt: In function `vfnprintf':
/home/sunq/uclinux/uClinux-dist/lib/libm/../libc/stdio2/printf.c:451: undefine
d reference to `gcvt'
msntp.elf2flt: In function `vfscanf':
/home/sunq/uclinux/uClinux-dist/lib/libm/../libc/stdio2/scanf.c:425: undefined
reference to `fp_scan'
collect2: ld returned 1 exit status
make[2]: *** [msntp] Error 1
发表于 2005-4-13 16:09:43 | 显示全部楼层
你有libm.a的库么。see
-llibrary
连接名为library的库文件.
连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`liblibrary.a'.连接器会 当做文件名得到准确说明一样引用这个文件.

估计你是没有连接到库,所以它说有些东西没有定义,hoho
回复

使用道具 举报

 楼主| 发表于 2005-4-13 16:50:02 | 显示全部楼层
好感动啊!!大侠这么快就答复我了。
我看了在uClinux-dist/lib/下是有libm.a的文件的,他自己能找到这么库吗?要不要改什么路径之类的哦?
多谢了!!!
回复

使用道具 举报

发表于 2005-4-13 17:02:31 | 显示全部楼层
要的,看你的编译参数里面没有指定这个路径,你自己用-L指定一下。
BTW:8要叫我大侠。
回复

使用道具 举报

 楼主| 发表于 2005-4-13 17:33:35 | 显示全部楼层
不好意思,还是不很明白哦,在make的提示信息中
-lm -L/home/sunq/uclinux/uClinux-dist/lib/libc/. -L/home/sunq/uclinux/uClinux-
dist/lib/libc/lib -L/home/sunq/uclinux/uClinux-dist/lib/libm
是不是意思就是已经包含了这个库了呢?
另外那些东西没有定义的好像是在libc下的函数吧,他include的时候会自己去找libc下include里面的头文件吧?

呵呵,俺刚刚学,多谢指教了哦!
回复

使用道具 举报

发表于 2005-4-14 11:59:45 | 显示全部楼层
include 只是include toolchain的标准目录的*.h,可以用-I 指定自己的目录
link 也是link toolchain的标准目录下的*.a *.so*, 可以用-L指定自己的目录
建议看一下GCC User Manual 。
回复

使用道具 举报

 楼主| 发表于 2005-4-14 13:48:04 | 显示全部楼层
哦,明白了,非常感谢!!
现在发现好像是floating point 的问题,因为同样遇到gcvt函数的ps.c也会报同样的错误哦。
能不能问一下我使用uC-libc怎么进行floating point support呢?我只发现在uClibc中有HAS_FLOATING_POINT而在uC-libc中没有发现有哦。

谢谢了!!!
回复

使用道具 举报

发表于 2005-4-16 12:35:44 | 显示全部楼层
uclinux的浮点也是模拟的吧,没做过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 13:33 , Processed in 0.058095 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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