Qt 在linux系统下加载动态库的以依赖搜索路径

本文记录了在Linux环境下使用Qt应用程序加载动态库时遇到的问题及尝试的解决方案。主程序Client_d尝试加载plugin目录下的Stream.so,而Stream.so依赖于C.so。尽管C.so与Stream.so在同一目录,但加载时仍报找不到C.so错误。尝试通过设置rpath解决,包括方法1(QMAKE_LFLAGS添加-Wl,--rpath,$$ORIGINplugin),方法2(使用QMAKE_RPATHDIR),方法3(QMAKE_FLAGS添加-Wl,-rpath,$$ORIGINplugin)。目前方法均未成功,作者计划继续研究并更新帖子分享最终解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qt 在linux系统下加载动态库的以依赖搜索路径

背景

主工程可执行程序Client_d 会使用qlibrary加载动态库Stream.so,stream.so是其他的工程项目里的动态库,两种工程路径没有明确的相对位置,编译完的stream.so拷贝到client_d的/plugin目录下加载使用。
stream.so使用了C.so库里的方法,C是别人提供的基础库拷贝到了stream工程的release目录里进行编译链接,Stream和C都是动态库。Stream的pro中知道LIBS+=-L(release的相对路径) -lC
Client_d 启动以后通过qlibrary加载(./plugin/Stream.so)库时,会提示找不到C.so,实际上我把C.so拷贝了一份在plugin里跟Stream.so放在一起了,但是还是提示找不到,我直接在终端里修改了LD_LIBRARY_PATH指定这个Plugin的绝对路径是可以加载起来的,但是这样不是我想要的,我希望通过程序内部解决这个问题。
网络上找到一些方法,试了下没有成功,先暂且做个笔记

方法1

QMAKE_LFLAGS += -Wl,–rpath=’$$ORIGIN\plugin’
QMAKE_LFLAGS += ‘-Wl,-rpath,’$$ORIGIN\plugin’’
要不要第一个引号感觉很迷

方法2

QMAKE_RPATHDIR =
/X
/Y
/Z
有说必须加个:的 QMAKE_RPATHDIR += :’$$ORIGING’

方法3

QMAKE_FLAGS += " -Wl,-rpath,’$$ORIGIN’ -Wl,-rpath,’$$ORIGIN\plugin’"

有人说两个都要加的,更迷了
unix:{
# suppress the default RPATH if you wish
QMAKE_LFLAGS_RPATH=
# add your own with quoting gyrations to make sure $ORIGIN gets to the command line unexpanded
QMAKE_LFLAGS += “-Wl,-rpath,’$$ORIGIN’”
}

还有人提到要改
QMAKE_POST_LINK
等我成功了,再来改帖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值