我的环境是:
Debian Linux 8 x86
qt 5.3.1安装在/opt中(避免与
系统安装qt)
季度创建者3.4.2
合同一般条件4.9.2
在创建我的应用程序时,我决定将一些功能分成几个部分。所以我创建了子文件夹项目(main),其中有两个文件夹/子项目(UIlogics),如下所示:
主要的
用户界面
逻辑
UI是默认的qt小部件应用程序(main.cpp和window)时。logics是一个非常简单的共享库,具有空类(空构造函数,无其他内容)。我又加了一句

DESTDIR = $$PWD/../UI

最后的Logics将在logics.pro文件夹中创建。
我添加了
LIBS += -L $$PWD -llogics

logics.so可执行文件链接到UI
现在,当我使用UI.pro运行UI项目中的可执行文件时,会出现奇怪的错误:
UI:加载共享库时出错:liblogics.so.1:无法打开
共享对象文件:没有这样的文件或目录
该错误仅存在于logics.so派生的UI类时。看起来QtCreator找不到Logics库。但当我查询它的依赖关系时,我发现没有问题:
LDD逻辑.so
    linux-gate.so.1 (0xb770d000)
    libQt5Core.so.5 => /opt/Qt5.3.1/5.3/gcc/lib/libQt5Core.so.5
    ...

如果QObject类独立于logics.so我的意思是,当我删除Qt时,错误就消失了。
但我不能将这个qt库路径添加到Logics中,因为它将与系统安装的qt库冲突。
所以我的问题是-如何使用自定义链接的共享库从qtcreator运行mainQt项目?

最佳答案

好的,在搜索了Internet之后,我发现(我非常惊讶)Linux可执行文件默认情况下不包括库搜索路径中的当前文件夹。尽管可执行文件和库位于某个文件夹中,但可执行文件将无法加载*.so库。
所以至少有两种解决方案:
LD_LIBRARY_PATH设置为包括当前文件夹(或某些指定文件夹)
导出ld_library_path=。
设置Rpath。在*.pro文件中添加以下行:
qmake_lflags+=-wl,-rpath,.

09-06 18:42