linux2.6驱动的Makefile中如何链接静态库

Sniper167 2010-11-16 05:41:34
这是原本的Makefile
obj-$(CONFIG_SENSORS_MAX6875) += max6875.o
obj-$(CONFIG_SENSORS_PCA9539) += pca9539.o
obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o

我新加入一个test.c,test.c中调用到一个第三方静态库(libwfs.a)中的函数,test.c和libwfs.a都位于当前目录下,我在Makefile加入以下几行:

LDFLAGS += -L$(pwd)
LDFLAGS += -llibwfs.a
obj-y += test.o

编译提示libwfs.a中被调用的函数是undefined reference to “函数名”

请问这个Makefile要如何修改?
...全文
594 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxiaolin8374 2012-02-01
  • 打赏
  • 举报
回复
我在Makefile中调用静态库也一直出现"编译提示libwfs.a中被调用的函数是undefined reference to “函数名”这个问题,有没有高手碰到过类似的问题呢?可否指教一下,不甚感激!!
jjun55 2011-10-24
  • 打赏
  • 举报
回复
最终是怎么做好了?我现在也遇到这问题了。
Sniper167 2010-11-29
  • 打赏
  • 举报
回复
看来只有走.o这条路了
结贴散分
知和行 2010-11-23
  • 打赏
  • 举报
回复
你要做的是 做个应用程序来调用自己的驱动,再在这个应用程序中链接你那个什么公司的什么库,去实现什么什么功能。
alex_gogo 2010-11-23
  • 打赏
  • 举报
回复
那你就让给你这个库的人再给你一个同样文件做的.o啦。
RichardYSteven 2010-11-22
  • 打赏
  • 举报
回复
关注一下,确实没有链接过库。
怎么链接?
RichardYSteven 2010-11-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 laojing123 的回复:]

"编译提示libwfs.a中被调用的函数是undefined reference to “函数名”
即使链接是正确的也可能出现这个问题啊。

比如你忘了将这些函数的声明加到你的代码中。
[/Quote]
不可能,没有声明报的是编译的错。
这个undefined reference to 是链接的错
Sniper167 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pottichu 的回复:]
驱动是不会以库的形式存在的,也没有所谓库的概念。

驱动是以模块方式存在,通常都是 xxx.ko 以 ko结尾。
所以你这个-llibwfs.a 不是用户态的静态库是什么?
[/Quote]

我是写驱动程序,这个驱动程序里面需要调用别人给的一个.a文件里的函数。那请问我这个问题如何解决?我需要调用的那个函数,不可能给我源码的。
Sniper167 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wenxy1 的回复:]
楼主到底是写内核里的内核模块或者驱动程序,还是用户空间的应用程序?
[/Quote]
我是写驱动程序,这个驱动程序里面需要调用别人给的一个.a文件里的函数
Sniper167 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wwwwfly 的回复:]
不行的话,把($pwd)替换成绝对路径试试
[/Quote]
还是报错 undefined reference to
wwwwfly 2010-11-17
  • 打赏
  • 举报
回复
不行的话,把($pwd)替换成绝对路径试试
wwwwfly 2010-11-17
  • 打赏
  • 举报
回复
LDFLAGS += -L($pwd) -lwfs
Sniper167 2010-11-17
  • 打赏
  • 举报
回复
没人顶啊 哪位兄弟帮助一下
Wenxy1 2010-11-17
  • 打赏
  • 举报
回复
楼主到底是写内核里的内核模块或者驱动程序,还是用户空间的应用程序?
pottichu 2010-11-17
  • 打赏
  • 举报
回复
驱动是不会以库的形式存在的,也没有所谓库的概念。

驱动是以模块方式存在,通常都是 xxx.ko 以 ko结尾。
所以你这个-llibwfs.a 不是用户态的静态库是什么?
Sniper167 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pottichu 的回复:]
驱动程序怎么能连接 用户态的库?

是在很无语。。
[/Quote]

用户态的库?这个库是另外的公司提供的,如何判定他是用户态的库呢?
Sniper167 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 laojing123 的回复:]
"编译提示libwfs.a中被调用的函数是undefined reference to “函数名”
即使链接是正确的也可能出现这个问题啊。

比如你忘了将这些函数的声明加到你的代码中。
[/Quote]

加了声明该函数的头文件了的
pottichu 2010-11-17
  • 打赏
  • 举报
回复
驱动程序怎么能连接 用户态的库?

是在很无语。。
井朝天 2010-11-17
  • 打赏
  • 举报
回复
"编译提示libwfs.a中被调用的函数是undefined reference to “函数名”
即使链接是正确的也可能出现这个问题啊。

比如你忘了将这些函数的声明加到你的代码中。
Sniper167 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lgch123456 的回复:]
首先你要知道你的libwfs.a在哪?然后
LDFLAGS += -llibwfs.a的时候应该是这样的
LDFLAGS += -lwfs
[/Quote]

libwfs.a跟test.c在同一目录
修改为LDFLAGS += -lwfs,编译结果一样报错,并且是同样的错误
加载更多回复(2)
买书时赠送的电子稿,代码示例丰富,非常不错!全书分三个文件打包。 linuxdriver_code_tool |-- 03 | `-- 2.6内核升级工具 | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools-3.2.2.tar.bz2 | `-- modutils-2.4.5-1.src.rpm |-- 04 | |-- 内核模块参数范例 | | `-- book.c | |-- 内核模块导出符号 | | `-- export_symb.c | `-- 最简单的内核模块 | `-- hello.c |-- 05 | `-- udev源代码 | `-- udev-114.tar.gz |-- 06 | |-- globalmem驱动 | | `-- globalmem.c | `-- 包含2个globalmem设备的驱动 | `-- globalmem_two.c |-- 07 | `-- 含并发控制的globalmem驱动 | `-- globalmem_lock.c |-- 08 | |-- globalfifo驱动 | | `-- globalfifo.c | `-- poll应用程序范例 | `-- pollmonitor.c |-- 09 | |-- 异步通知应用程序范例 | | `-- asyncmonitor.c | `-- 支持异步通知的globalfifo | `-- globalfifo_async.c |-- 10 | |-- S3C2410实时钟驱动 | | `-- s3c2410-rtc.c | `-- 秒设备驱动与应用程序 | |-- second.c | `-- second_test.c |-- 11 | |-- DMA范例 | | |-- 3c505.c | | |-- 3c505.h | | `-- dma.h | `-- 静态映射范例 | `-- mach-smdk2440.c |-- 12 | |-- NVRAM驱动 | | `-- generic_nvram.c | |-- 触摸屏驱动 | | |-- 作为input设备 | | | |-- s3c2410_ts.c | | | `-- s3c2410_ts.h | | `-- 作为普通字符设备 | | `-- s3c2410-ts.c | |-- 看门狗驱动 | | `-- s3c2410_wdt.c | `-- 平台设备 | `-- devs.c |-- 13 | |-- IDE驱动 | | |-- ide-disk.c | | `-- ide-h8300.c | `-- RAMDISK驱动 | `-- rd.c |-- 14 | |-- S3C2410串口驱动 | | |-- regs-gpio.h | | |-- regs-serial.h | | `-- s3c2410.c | `-- 串口核心层 | |-- serial_core.c | `-- serial_core.h |-- 15 | |-- S3C2410 I2C主机驱动 | | |-- i2c-s3c2410.c | | |-- iic.h | | |-- regs-gpio.h | | `-- regs-iic.h | `-- SAA711x I2C设备驱动 | `-- saa711x.c |-- 16 | `-- CS8900以太网设备驱动 | |-- cs89x0.c | `-- cs89x0.h |-- 17 | |-- ALSA工具及库 | | |-- alsa-driver-1.0.15.tar.bz2 | | |-- alsa-firmware-1.0.15.tar.bz2 | | |-- alsa-lib-1.0.15.tar.bz2 | | |--
Linux 设备驱动开发详解 linuxdriver_code_tool |-- 03 | `-- 2.6内核升级工具 | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools-3.2.2.tar.bz2 | `-- modutils-2.4.5-1.src.rpm |-- 04 | |-- 内核模块参数范例 | | `-- book.c | |-- 内核模块导出符号 | | `-- export_symb.c | `-- 最简单的内核模块 | `-- hello.c |-- 05 | `-- udev源代码 | `-- udev-114.tar.gz |-- 06 | |-- globalmem驱动 | | `-- globalmem.c | `-- 包含2个globalmem设备的驱动 | `-- globalmem_two.c |-- 07 | `-- 含并发控制的globalmem驱动 | `-- globalmem_lock.c |-- 08 | |-- globalfifo驱动 | | `-- globalfifo.c | `-- poll应用程序范例 | `-- pollmonitor.c |-- 09 | |-- 异步通知应用程序范例 | | `-- asyncmonitor.c | `-- 支持异步通知的globalfifo | `-- globalfifo_async.c |-- 10 | |-- S3C2410实时钟驱动 | | `-- s3c2410-rtc.c | `-- 秒设备驱动与应用程序 | |-- second.c | `-- second_test.c |-- 11 | |-- DMA范例 | | |-- 3c505.c | | |-- 3c505.h | | `-- dma.h | `-- 静态映射范例 | `-- mach-smdk2440.c |-- 12 | |-- NVRAM驱动 | | `-- generic_nvram.c | |-- 触摸屏驱动 | | |-- 作为input设备 | | | |-- s3c2410_ts.c | | | `-- s3c2410_ts.h | | `-- 作为普通字符设备 | | `-- s3c2410-ts.c | |-- 看门狗驱动 | | `-- s3c2410_wdt.c | `-- 平台设备 | `-- devs.c |-- 13 | |-- IDE驱动 | | |-- ide-disk.c | | `-- ide-h8300.c | `-- RAMDISK驱动 | `-- rd.c |-- 14 | |-- S3C2410串口驱动 | | |-- regs-gpio.h | | |-- regs-serial.h | | `-- s3c2410.c | `-- 串口核心层 | |-- serial_core.c | `-- serial_core.h |-- 15 | |-- S3C2410 I2C主机驱动 | | |-- i2c-s3c2410.c | | |-- iic.h | | |-- regs-gpio.h | | `-- regs-iic.h | `-- SAA711x I2C设备驱动 | `-- saa711x.c |-- 16 | `-- CS8900以太网设备驱动 | |-- cs89x0.c | `-- cs89x0.h |-- 17 | |-- ALSA工具及库 | | |-- alsa-driver-1.0.15.tar.bz2 | | |-- alsa-firmware-1.0.15.tar.bz2 | | |-- alsa-lib-1.0.15.tar.bz2 | | |-- alsa-oss-1.0.15.tar.bz2 | | |-- alsa-tools-1.0.15.tar.bz2 | | |-- alsa-utils-1.0.13.tar.bz2 | | `-- pyalsa-1.0.15.tar.bz2 | |-- ALSA驱动范例 | | |-- sa11xx-uda1341.c | | `-- uda1341.h | |-- ALSA应用程序范例 | | |-- pcm.c | | `-- pcm_min.c | |-- OSS驱动范例 | | `-- s3c2410-uda1341.c | `-- OSS应用程序范例 | |-- mixer.c | `-- sound.c |-- 18 | |-- FRAMEBUFFER应用程序范例 | | `-- fb_display | | |-- fb_display.c | | |-- fb_display.h | | |-- Makefile | | |-- README | | `-- test.c | `-- S3C2410 LCD驱动 | |-- s3c2410fb.c | `-- s3c2410fb.h |-- 19 | |-- busybox源代码 | | `-- busybox-1.2.1.tar.bz2 | |-- MTD工具 | | `-- mtd-utils-1.0.0.tar.gz | |-- nand驱动范例 | | `-- s3c2410.c | |-- nor驱动范例 | | `-- s3c2410nor.c | `-- yaffs&yaffs2源代码 | |-- yaffs.tar.gz | `-- yaffs2.tar.gz |-- 20 | |-- USB串口驱动 | | |-- usb-serial.c | | `-- usb-serial.h | |-- USB工具 | | `-- usbview-1.0.tar.tar | |-- USB骨架程序 | | `-- usb-skeleton.c | |-- USB键盘驱动 | | |-- input.h | | |-- usb_input.h | | `-- usbkbd.c | `-- usb主机控制器驱动范例 | |-- ohci-s3c2410.c | `-- usb-control.h |-- 21 | |-- PCI骨架程序 | | `-- pci-skeleton.c | `-- PCI驱动范例 | `-- i810_audio.c `-- 22 |-- 范例代码 | |-- oops范例 | | |-- oops_example.asm | | `-- oops_example.c | `-- proc范例 | `-- sim_proc.c `-- 内核调试工具 |-- ddd-3.3.11.tar.gz |-- gdbmod-2.4.bz2 |-- kdb-v4.4-2.6.15-rc5-common-1.bz2 |-- kdb-v4.4-2.6.15-rc5-common-2.bz2 |-- kdb-v4.4-2.6.15-rc5-i386-1.bz2 `-- linux-2.6.15.5-kgdb-2.4.tar.tar 73 directories, 91 files

4,466

社区成员

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

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