生成文件无法在运行时链接库
Makefile unable to link libraries during runtime
所以我正在使用 nvidia 的 deepstream sdk 并尝试修改给出的示例示例之一的 makefile,因为我希望链接和添加我自己的库。这是我正在使用的生成文件,我在其中设置CUSTOM_LIB的路径以指向我的库的位置。问题是项目编译成功,但在运行时,它找不到自定义库。我对生成的可执行文件执行了ldd,并且它还将库显示为"未找到"。我认为这与 rpath 有关,但我不确定。
APP:= sample
TARGET_DEVICE = $(shell gcc -dumpmachine | cut -f1 -d -)
NVDS_VERSION:=4.0
LIB_INSTALL_DIR?=/opt/nvidia/deepstream/deepstream-$(NVDS_VERSION)/lib/
ifeq ($(TARGET_DEVICE),aarch64)
CFLAGS:= -DPLATFORM_TEGRA
endif
CUDA_VER:=10.0
CC:=g++
SRCS:= $(wildcard ../src/*.c)
#SRCS+= $(wildcard ../../apps-common/src/*.c)
#SRCS+=
INCS:= $(wildcard ../include/*.h)
PKGS:= gstreamer-1.0 gstreamer-video-1.0 x11 opencv
OBJS:= $(SRCS:.c=.o)
CFLAGS+= -I../include -I/usr/include -I$(CUSTOM_LIB)/include -I/usr/local/cuda-10.0/targets/aarch64-linux/include/ -I/usr/include/jsoncpp -DDS_VERSION_MINOR=0 -DDS_VERSION_MAJOR=4 -fpermissive -Wnarrowing
LIBS+= -L$(LIB_INSTALL_DIR) -L/usr/lib/aarch64-linux-gnu -L$(CUSTOM_LIB)/lib -L/usr/lib/aarch64-linux-gnu/ -lcurl -letlic -letolm -lssl -lcrypto -llogger -lpthread -lsqlite3 -ljsoncpp -lnvdsgst_meta -lnvbufsurface -lnvbufsurftransform -lnvds_meta -lnvdsgst_helper -lnvds_utils -lm -L/usr/local/cuda-$(CUDA_VER)/lib64/ -lcudart
-lgstrtspserver-1.0 -Wl,-rpath,$(LIB_INSTALL_DIR)
CFLAGS+= `pkg-config --cflags $(PKGS)`
LIBS+= `pkg-config --libs $(PKGS)`
all: $(APP)
debug: CXXFLAGS += -DDEBUG -g
debug: CFLAGS += -DDEBUG -g
debug: $(APP)
%.o: %.c $(INCS) Makefile
$(CC) -c -o $@ $(CFLAGS) $<
$(APP): $(OBJS) Makefile
$(CC) -o $(APP) $(OBJS) $(LIBS)
clean:
rm -rf $(OBJS) $(APP)
您需要将 rpath 设置为以冒号分隔的库所在的目录列表。您只添加LIB_INSTALL_DIR而不添加CUSTOM_LIB_DIR。一般来说,你传递给 -L 的所有内容也需要传递给 -rpath,除非有特殊原因不这样做。例如,如果您正在构建一个具有多个库的软件包,并且要安装在/usr/lib 等标准位置,则不必将库临时所在的目录添加到 -rpath。如果要安装到非标准目录,请添加该目录。
相关文章:
- C++ 运行时链接器错误 (liblog4cpp.so.5) Eclipse
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 生成文件无法在运行时链接库
- 引用构造函数时链接失败
- 运行时链接到不在LD_LIBRARY_PATH上的动态库
- 模型依赖关系目标,在运行时链接
- 根据用户配置在运行时链接共享对象
- CG 运行时链接器错误与 cmake 项目 (g++)
- 如何在运行时链接期间从我的 DLL 调用函数
- 格鲁运行时/链接器错误
- 在安卓上与 SDL_Mixer 和 SMPEG2 的运行时链接错误
- NDK使用STL时发生运行时链接错误
- 如何通知调试器运行时链接的 DLL 文件的位置
- 将现有的C++dll与Windows Phone组件运行时链接
- 选择要在运行时链接的库
- Boost库构建-运行时链接和链接选项之间的差异
- 更改运行时库选项对运行时链接的影响
- 在运行时链接c++ .o文件
- 在运行时链接c++对象
- 共享库和可执行文件与 Linux 上的静态 C 运行时链接.它们中的每一个都有像Windows这样的独立堆吗?