如何在makefile中添加相互依赖的库
Posted
技术标签:
【中文标题】如何在makefile中添加相互依赖的库【英文标题】:how to add interdependent libraries in a makefile 【发布时间】:2018-03-09 12:06:19 【问题描述】:我需要为我的项目制作一个 makefile,并且我有两个相互依赖的库,它们是 libpcsc.so 和 libccid.so 。
谁能告诉我我的错误是什么?提前感谢您的回答。
如果您需要更多信息,请告诉我。
我的makefile是这样的:
顺便说一句,lib目录之一是/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/,另一个是usr/lib/pcsc/drivers/ifd-ccid.bundle/目录/Linux/
CC = gcc
LIB_DIRS = -L/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/
-L../../usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/
INCLUDE_DIR = /home/hasanbucak/Desktop/ccid-1.4.28/src/ #ccid_usb.h
CFLAGS = -g -Wall
obj-y:= smcard
default: all
all: smcard
smcard:
$(CC) $(CFLAGS) $(LIB_DIRS) -I$(INCLUDE_DIR) -c -o $(obj-y).o $(obj-y).c
$(CC) $(CFLAGS) -lccid -lpcsclite $(LIB_DIRS) -I$(INCLUDE_DIR) -o $(obj-y) $(obj-y).c
clean:
rm $(obj-y).o $(obj-y)
当我在终端中写 make 时,它说:
hasanbucak@ubuntu:~/Desktop/hasan$ make
gcc -g -Wall -L/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/ -L../../usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/ -I/home/hasanbucak/Desktop/ccid-1.4.28/src/ -c -o smcard.o smcard.c
gcc -g -Wall -lccid -lpcsclite -L/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/ -L../../usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/ -I/home/hasanbucak/Desktop/ccid-1.4.28/src/ -o smcard smcard.c
/usr/bin/ld: cannot find -lccid
collect2: error: ld returned 1 exit status
Makefile:20: recipe for target 'smcard' failed
make: *** [smcard] Error 1
【问题讨论】:
"谁能告诉我我的错误是什么?" 什么错误?你没有提到问题是什么。请edit您的问题并添加必要的信息。 您写道 ccid 在 usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/ 中,但您通过 ../../usr/lib/pcsc/ 引用它drivers/ifd-ccid.bundle/Contents 是不同的目录 找不到 lccid,在您的系统中找到这个ccid
库,并确保在链接时提供正确的路径。
如果它们是相互依赖的,为什么不将它们合二为一呢?
非常感谢你们???? @beta 实际上我正在接受培训,我的导师希望我以这种方式做到这一点,但到目前为止我无法做到,但现在我明白了这个问题,感谢大家。
【参考方案1】:
Make 已经告诉你 Makefile 出了什么问题:
/usr/bin/ld: cannot find -lccid
您应该正确指定 ccid 的路径:
LIB_DIRS = -L/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/
-L/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/
注意/usr
和../../usr
根本不是同一个目录。
第一个是绝对的(即相对于你的根目录),而第二个是相对的,它扩展为~/Desktop/hasan/../../usr
,相当于/home/hasanbucak/usr
。
【讨论】:
以上是关于如何在makefile中添加相互依赖的库的主要内容,如果未能解决你的问题,请参考以下文章
如何影响目标的顺序,为 Makefile.am 添加额外的步骤等?