DeepStream SDK自定义库运行时链接失败问题求助
解决DeepStream自定义库运行时找不到的问题
你猜的没错,这个问题确实和**rpath(运行时库搜索路径)**有关——编译时链接器通过-L$(CUSTOM_LIB)/lib找到了你的自定义库,但运行时动态链接器不知道这个路径,所以才会出现ldd显示"not found"的情况。
具体修改步骤
你的Makefile里已经给DeepStream的库目录加了rpath,但漏掉了自定义库的路径。只需要修改LIBS变量里的-Wl,-rpath参数,把你的自定义库路径也加进去:
修改前的LIBS片段:
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)
修改后的LIBS片段(注意-Wl,-rpath部分用冒号分隔多个路径):
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):$(CUSTOM_LIB)/lib
为什么这样改?
-L参数只是告诉编译时链接器去哪里找库文件,不会影响运行时-Wl,-rpath,<路径>是告诉链接器把指定路径嵌入到可执行文件的运行时库搜索列表里,这样动态链接器在运行时就能直接找到你的自定义库,不需要手动设置LD_LIBRARY_PATH环境变量
额外检查点
如果修改后还是有问题,可以再检查这几点:
- 确认
$(CUSTOM_LIB)/lib路径下确实存在你的自定义库文件(比如libetlic.so、libetolm.so这些) - 确认你的自定义库是针对
aarch64架构编译的(和你的目标平台匹配) - 可以用
readelf -d <你的可执行文件>命令查看RPATH字段,确认自定义库路径已经被正确嵌入
内容的提问来源于stack exchange,提问作者user11733000




