Я готовлю C++-приложение на Linux (Ubuntu 16.04) с помощью нескольких библиотек poco, с которыми я динамически связан. У меня есть папка проекта, которая состоит из: include, bin, lib, src и build folders и соответствующего Makefile. До сих пор я использовал следующий Makefile, который получил библиотеки из/USR/местные/Библиотека
CC := g++
# Folders
SRCDIR := src
BUILDDIR := build
TARGETDIR := bin
# Targets
EXECUTABLE := C++_APP
TARGET := $(TARGETDIR)/$(EXECUTABLE)
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
CFLAGS := -c -Wall
INC := -I include -I /usr/local/include
LIB := -L /usr/local/lib -lPocoFoundation -lPocoNet -lPocoUtil
$(TARGET): $(OBJECTS)
@echo " Linking..."
@echo " $(CC) $^ -o $(TARGET) $(LIB)"; $(CC) $^ -o $(TARGET) $(LIB)
$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
@mkdir -p $(BUILDDIR)
@echo " $(CC) $(CFLAGS) $(INC) -c -o [email protected] $<"; $(CC) $(CFLAGS) $(INC) -c -o [email protected] $<
clean:
@echo " Cleaning...";
@echo " $(RM) -r $(BUILDDIR) $(TARGET)"; $(RM) -r $(BUILDDIR) $(TARGET)
.PHONY: clean
Теперь я хотел бы во время запуска компоновщика для поиска библиотек только в проекте Lib папки без изменения LD_LIBRARY_PATH или редактирования ЛД. so.conf. Поэтому я искал, и я обнаружил, что это может быть достигнуто с помощью аргумента компоновщика -Wl, rpath, $ ORIGIN. Поэтому я полагаю, что мне нужно добавить следующее заявление
LDFLAGS := -Wl,-rpath,$ORIGIN/../lib
и изменить заявление LIB следующим образом:
LIB := -L $ORIGIN/../lib -lPocoFoundation -lPocoNet -lPocoUtil
Однако до сих пор получить библиотеки из каталога по умолчанию (USR/местные/Lib), так как я тестировал его без библиотеки в папке проекта lib. Что я сделал не так?
'LIB: = -L $ (ORIGIN) /../ lib -lPocoFoundation -lPocoNet -lPocoUtil'? Обратите внимание:() – skomp
@skomp Тот же результат с $ (ORIGIN). Он извлекает библиотеки из папки по умолчанию, а не в проектную. – dk13
Параметр -rpath linker не заменяет путь поиска библиотеки по умолчанию, но добавляет к нему еще одну запись. So -rpath работает в ситуациях, когда lib не находится в пути поиска по умолчанию. Не ваше дело, не так ли?Попробуйте передать вам полные пути к libs в командной строке линкера. Что-то вроде '-l $ ORIGIN /../ lib/PocoFoundation' –