我遇到的问题是我需要使用位于不同路径位置的特定库来编译我的代码。我需要从./ramdisk/libs路径使用-lncurses库,问题是这个目录还包含了一个我不希望被链接的lthr库版本。 makefile从同一个位置拉出两个库,这不是我想要的。我无法在文件系统中更改这些库目录的内容,因此我需要找到一种方法来告诉Makefile从路径A链接lncurses库并从路径B链接lthr库,而不是使用路径A中的lthr。
有什么建议吗?
CC=icc
NCE=-L./ramdisk/libs
CFLAGS+=-I$(ROOTDIR)/../../include
#LDFLAGS=-static -lthr
$(DESTDIR)/nce: nce
mkdir -p $(DESTDIR)
$(INSTALL) -m 777 nce $(DESTDIR)
nce: nce.c
$(CC) $(CFLAGS) nce.c $(LDFLAGS) -o nce -lthr $(NCE) -lncurses
答案 0 :(得分:2)
您可以(可能)通过提供库存档的完整路径来绕过搜索。因此,您可以尝试-lncurses
(或其他),而不是指定./ramdisk/libs/libncurses.a
。您没有指定它是否是共享库,我不完全确定它适用于共享库,但可能值得一试。
[编辑]
由于这是一个共享库问题,可能类似于:
CC=icc
THR=/full/path/to/wherever/libthr/lives
NCE=/full/path/to/ramdisk/libs
CFLAGS+=-I$(ROOTDIR)/../../include
LDFLAGS=-static
nce: nce.c
$(CC) $(CFLAGS) nce.c $(LDFLAGS) -o nce -L$(THR) -W,-rpath=$(THR) -lthr -L$(NCE) -W,-rpath=$(NCE) -lncurses
由于我不熟悉icc,我在黑暗中拍摄,但我的想法是确保链接器在运行链接程序的搜索路径之前将其路径放在之前在ramdisk上,以便首先在那里找到thr。
答案 1 :(得分:1)
您可以将远程库复制到本地工作目录。
ncurses将从一个位置获取,而thr将从另一个位置获取。