You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.solibetolm.so这些)
  • 确认你的自定义库是针对aarch64架构编译的(和你的目标平台匹配)
  • 可以用readelf -d <你的可执行文件>命令查看RPATH字段,确认自定义库路径已经被正确嵌入

内容的提问来源于stack exchange,提问作者user11733000

火山引擎 最新活动