韩大卫@吉林师范大学
2014.12.8
转载请表明出处
*****************************************
本文目的:
一, 解决在mac 系统里make menuconfig 报错: lcd: symbol(s) not found for architecture x86_64 的bug
二, 使用mconf, 自定义实现一个make menuconfig的界面
一, 在MAC 系统下使用make menuconfig 调用图形界面做config时, 可能会有如下报错:
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
一般地, 编译busybox或者uboot或者linux内核等软件包之前, 还是使用图形界面来做配置最为最直观. 实现这一目的自然是执行make menuconfig.
make menuconfig 实际上就是拿 mconf 这个工具去解析config文件里的描述信息, 进而转换为图形界面, 当然, config 文件有自动定义的语法格式, 详细见本文最下放.
第一次执行make menuconfig时, 需要先生成 mconf 这个工具, 在预编译 scripts/kconfig/mconf.c 生成scripts/kconfig/mconf.o 之后的连接阶段,
需要ldconfig参数给出所需要连接的库的位置, 所说的库为后缀为.a 或.so 或 .dylib 的ncursesw ncurses curses库,
生成ldflags的的脚本为: scripts/kconfig/lxdialog/check-lxdialog.sh
上面报错的原因就是, MAC 系统下 ncursesw ncurses curses 这些库文件的位置不能通过 check-lxdialog.sh 里给出命令来找到, 所以生成的 ldflags 不对, 进而无法生成mconf.
该bug的解决办法如下:
以编译 busybox 为例子:
打开 scripts/kconfig/lxdialog/check-lxdialog.sh 文件.
vi scripts/kconfig/lxdialog/check-lxdialog.sh
将红色部分添加进去即可.
ldflags()
{ &