Как сделать Makefile, используя определенные библиотеки по разным путям? - PullRequest
3 голосов
/ 23 октября 2009

Проблема, с которой я столкнулся, заключается в том, что мне нужно скомпилировать мой код, используя определенные библиотеки, которые находятся в разных местах пути. Мне нужно использовать библиотеку -lncurses по пути ./ramdisk/libs, проблема в том, что этот каталог также содержит версию библиотеки lthr, с которой я не хочу связываться. Makefile вытягивает обе библиотеки из одного места, а это не то, что мне нужно. Я не могу изменить содержимое этих каталогов библиотеки в файловой системе, поэтому мне нужно найти способ, чтобы Makefile связывал библиотеку lncurses с пути A и связывал библиотеку lthr с путем B вместо использования lthr из пути A. *

Есть предложения?

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

Ответы [ 2 ]

2 голосов
/ 23 октября 2009

Вы можете (возможно) обойти поиск, указав полный путь к архиву библиотеки. Поэтому вместо указания -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 голос
/ 23 октября 2009

Вы можете скопировать удаленную библиотеку в локальный рабочий каталог.

ncurses будет исходить из одного места, а thr - из другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...