背景
主工程可执行程序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
等我成功了,再来改帖