私はlinux(Ubuntu 16.04)上で、私が動的にリンクしているいくつかのpocoライブラリを使って、C++アプリケーションを準備しています。 include、bin、lib、src、buildフォルダと関連するMakefileで構成されるプロジェクトフォルダがあります。これまでのところ私は今、私はLD_LIBRARY_PATHまたは編集するLDを変更せずにのみ、プロジェクトのlibフォルダ内のライブラリを検索するようにリンカーを走行中に希望
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には/ usr/local /からライブラリを持って、次のMakefileを使用していました。 so.conf。そこで検索したところ、これはリンカー引数-Wl、rpath、$ ORIGINによって実現できることがわかりました。それはまだデフォルトディレクトリ(USR/local/libのからライブラリを入手ただし
LIB := -L $ORIGIN/../lib -lPocoFoundation -lPocoNet -lPocoUtil
:だから私は、私は次の文
LDFLAGS := -Wl,-rpath,$ORIGIN/../lib
を追加し、次のようLIBステートメントを変更する必要があることを前提としてい)、私はプロジェクトlibフォルダ上のライブラリなしでそれをテストして以来。私は何を間違えたのですか?
'LIB:= -L $(ORIGIN)/../ lib -lPocoFoundation -lPocoNet -lPocoUtil'? () – skomp
@skompに注意してください$(ORIGIN)と同じ結果です。デフォルトのフォルダからライブラリを取得しますが、プロジェクトのライブラリは取得しません。 – dk13
-rpathリンカー・オプションは、デフォルトのライブラリー検索パスを置き換えず、別のエントリーを追加します。したがって、-rpathは、libがデフォルトの検索パスにない場合に機能します。あなたの場合ではないでしょうか?リンカのコマンドラインでlibsにフルパスを渡してみてください。 '-l $ ORIGIN /../ lib/PocoFoundation'のようなもの –