当前位置: 技术问答>linux和unix
linux2.6驱动的Makefile中如何链接静态库
来源: 互联网 发布时间:2017-01-31
本文导语: 这是原本的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
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要如何修改?
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要如何修改?
|
驱动是不会以库的形式存在的,也没有所谓库的概念。
驱动是以模块方式存在,通常都是 xxx.ko 以 ko结尾。
所以你这个-llibwfs.a 不是用户态的静态库是什么?
驱动是以模块方式存在,通常都是 xxx.ko 以 ko结尾。
所以你这个-llibwfs.a 不是用户态的静态库是什么?
|
看一下gcc 的 L选项
|
首先你要知道你的libwfs.a在哪?然后
LDFLAGS += -llibwfs.a的时候应该是这样的
LDFLAGS += -lwfs
LDFLAGS += -llibwfs.a的时候应该是这样的
LDFLAGS += -lwfs
|
LDFLAGS += -L($pwd) -lwfs
|
"编译提示libwfs.a中被调用的函数是undefined reference to “函数名”
即使链接是正确的也可能出现这个问题啊。
比如你忘了将这些函数的声明加到你的代码中。
即使链接是正确的也可能出现这个问题啊。
比如你忘了将这些函数的声明加到你的代码中。
|
楼主到底是写内核里的内核模块或者驱动程序,还是用户空间的应用程序?
|
不可能,没有声明报的是编译的错。
这个undefined reference to 是链接的错
|
那你就让给你这个库的人再给你一个同样文件做的.o啦。
|
你要做的是 做个应用程序来调用自己的驱动,再在这个应用程序中链接你那个什么公司的什么库,去实现什么什么功能。