1 x86编译
解压kermit源码压缩包,然后进入源码目录,执行下面命令执行编译:
make linux
1.1 错误1
ckufio.c:(.text+0xda8a): undefined reference to `crypt'
解决方法:
在makefile中找到"linuxa"目标,然后在下面的"-lm"右边空格,然后添加“-lcrypt”,如下图所示:
图1 添加-lcrypt
1.2 错误2
在64位的Ubuntu 14.04中,还可能出现一下错误:
ckuusx.o: In function `shocps':
ckuusx.c:(.text+0xe9): undefined reference to `stdscr'
ckuusx.c:(.text+0xee): undefined reference to `wmove'
ckuusx.c:(.text+0x104): undefined reference to `printw'
ckuusx.c:(.text+0x10b): undefined reference to `stdscr'
ckuusx.c:(.text+0x110): undefined reference to `wclrtoeol'
ckuusx.c:(.text+0x18c): undefined reference to `stdscr'
ckuusx.c:(.text+0x191): undefined reference to `wmove'
ckuusx.c:(.text+0x1b5): undefined reference to `printw'
ckuusx.c:(.text+0x1bc): undefined reference to `stdscr'
解决方法:
根据参考资料[3]的提示,在1.1小节图中“-lcrypt”后面添加“-lncurses”即可。
1.2 编译结果
编译kermit源码后,产生2个可执行文件:wart和wermit。其中wart只是一个辅助编译的工具,wermit才是我们真正需要的kermit工具。
2 交叉编译
在嵌入式开发过程中,可以使用kermit工具来实现PC与开发板直接的文件传输。这时候需要将kermit交叉编译。下面的操作默认读者已经配置好了交叉编译环境(例如arm-linux-gcc)。
2.1 修改编译器
在图1中仔细观察发现“CC = gcc,CC3 = gcc”。为了交叉编译,我们需要修改所使用的编译器。将它们改为交叉编译器,如下图所示:
图 2.1 修改编译器
修改编译器后,执行下面命令:
make linux
2.2 错误
图 2.2 试图执行./wart
在上图中可见,编译kermit过程中试图执行所生成的wart,但是由于它是使用交叉编译器编译生成的,故在x86 PC中执行发生错误。解决方法自然就是将1.1小节中适合x86运行的wart复制到本目录中替换由交叉编译器编译生成的wart,然后再执行make linux即可。
参考资料
[1]undefined reference to `crypt'怎么解决?