编译Linux时遇到undefined reference to

nopkpeter 2009-02-12 09:40:59
最近在向Linux中添加一些驱动,用于支持现行的主板。
具体为在Linux中添加了两个驱动,一个用于控制CPU的GPIO,一个用于控制主板上的LED灯。
而控制主板的LED灯的驱动需要依赖于控制GPIO的驱动。于是在GPIO的驱动中,利用EXPORT_SYMBOL导出了两个函数,并单独写了一个头文件给LED灯驱动使用。手工编译这两个模块的时候是OK的,但是通过修改Kconfig和Makefile加到Linux中,直接编译Linux会出现如下错误:
drivers/built-in.o: In function `led_ioctl':
psx610e_led.c:(.text+0xfddc): undefined reference to `pxe_gpio_write'
psx610e_led.c:(.text+0xfe28): undefined reference to `pxe_gpio_write'
drivers/built-in.o: In function `led_init':
psx610e_led.c:(.text+0xffcc): undefined reference to `pxe_gpio_write'
psx610e_led.c:(.text+0x10010): undefined reference to `pxe_gpio_write'

不知道怎么解决这样的问题。
...全文
5063 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nopkpeter 2009-02-13
  • 打赏
  • 举报
回复
自己解决了,从gpio出导出的函数被我static了,把static去掉就OK了。
nopkpeter 2009-02-12
  • 打赏
  • 举报
回复
发现LED驱动依赖于GPIO驱动时,如果我把LED驱动编成模块,而只把GPIO编进内核,就没问题了。
难道是都编进内核时,LED对于GPIO驱动的依赖无法满足,从而使得LED编译出错?不过我已经在Makefile里面把GPIO的驱动先编译了啊。
nopkpeter 2009-02-12
  • 打赏
  • 举报
回复
LED使用的头文件就放在.c文件的相同的目录里面了,直接#include "psx610e_gpio.h",应该头文件是找到了,不然不然编译的时候会因为找不到宏出错。
once_and_again 2009-02-12
  • 打赏
  • 举报
回复
手工编译这两个模块的时候是OK的,但是通过修改Kconfig和Makefile加到Linux中



-I path ?
nopkpeter 2009-02-12
  • 打赏
  • 举报
回复
可能上次贴的屏幕内容不全,再贴次:
CHK include/linux/version.h
CHK include/linux/utsrelease.h
CALL scripts/checksyscalls.sh
CHK include/linux/compile.h
CC drivers/char/psx610e_gpio.o
CC drivers/char/psx610e_led.o
LD drivers/char/built-in.o
LD drivers/built-in.o
GEN .version
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
LD init/built-in.o
LD vmlinux
drivers/built-in.o: In function `led_ioctl':
psx610e_led.c:(.text+0xbfc0): undefined reference to `pxe_gpio_write'
psx610e_led.c:(.text+0xc00c): undefined reference to `pxe_gpio_write'
drivers/built-in.o: In function `led_init':
psx610e_led.c:(.text+0xc234): undefined reference to `pxe_gpio_write'
psx610e_led.c:(.text+0xc260): undefined reference to `pxe_gpio_write'
make: *** [vmlinux] Error 1
nopkpeter 2009-02-12
  • 打赏
  • 举报
回复
这个依赖关系怎么添加呢?那个built-in.o是个二进制文件······
ahu9870 2009-02-12
  • 打赏
  • 举报
回复
出错信息本身是找不到链接的“pxe_gpio_write”,所以这个函数在哪里你把drivers/built-in.o的依赖关系加上就好了。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧