Makefile - 找不到共享库

use*_*936 5 c++ linux makefile

我有一个c ++ Linux项目的Makefile:

MODE ?= dbg
DIR = ../../../../../somdir/$(MODE)

SRC_FILES = a.cpp b.cpp
H_FILES = a.h

LDFLAGS += -L$(DIR)/lib/linux '-Wl,-R$$ORIGIN'
CPPFLAGS = -I$(DIR)/include
LIBRARIES = -lsomeso

ifeq (rel, $(MODE))
  CFLAGS = -Wall -g -DNDEBUG
else
  CFLAGS = -Wall -ansi -pedantic -Wconversion -g -DDEBUG -D_DEBUG
endif

sample: $(SRC_FILES) $(H_FILES) Makefile
    g++ $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(LIBRARIES) $(SRC_FILES) -o sample
Run Code Online (Sandbox Code Playgroud)

当我运行'make'时,它会构建项目,没有错误.但当我运行该项目时,它抱怨说:

error while loading shared libraries: libsomeso.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在DIR中提供的路径转到保存共享对象的文件夹(相对于放置makefile的位置),如果它是错误的路径,为什么它在make过程中没有抱怨.

有人知道我错过了什么吗?

谢谢马特

Max*_*kin 5

LDFLAGS += -L$(DIR)/lib/linux '-Wl,-R$$ORIGIN'
Run Code Online (Sandbox Code Playgroud)

以上应该是:

LDFLAGS += -L$(DIR)/lib/linux -Wl,-R$(DIR)/lib/linux '-Wl,-R$$ORIGIN'
Run Code Online (Sandbox Code Playgroud)

也就是说,对于每个非标准动态库位置,应指定-L相应的-Wl,-R.$ORIGIN需要找到相对于可执行文件的动态库,不确定你是否需要它.

人们经常建议使用LD_LIBRARY_PATH.在我看来,这是一个糟糕的建议,因为它使部署更加复杂.