【发布时间】:2015-07-29 01:17:17
【问题描述】:
我的环境是:
- Debian Linux 8 x86
- Qt 5.3.1 安装在 /opt 中(避免与 系统安装Qt)
- QtCreator 3.4.2
- GCC 4.9.2
在创建我的应用程序时,我决定将一些功能分成几个部分。所以我创建了带有 2 个文件夹/子项目(UI 和 logics)的子文件夹项目(main),如下所示:
- 主要
- 用户界面
- 逻辑
当UI 是默认的Qt Widget 应用程序(main.cpp 和窗口)。 logics 是一个非常简单的共享库,带有空类 Logics(空构造函数,仅此而已)。我已经添加了
DESTDIR = $$PWD/../UI
到logics.pro 所以最终的logics.so 将在UI 文件夹中创建。
UI.pro 我已经添加了
LIBS += -L $$PWD -llogics
将UI 可执行文件与logics.so 链接
现在,当我使用 QtCreator 从 UI 项目运行可执行文件时,出现奇怪的错误:
UI:加载共享库时出错:liblogics.so.1:无法打开 共享对象文件:没有这样的文件或目录
该错误仅在Logics 类派生自QObject 时存在。看起来 logics.so 找不到 Qt 库。但是当我查询它的依赖项时,我发现没有问题:
ldd logics.so
linux-gate.so.1 (0xb770d000) libQt5Core.so.5 => /opt/Qt5.3.1/5.3/gcc/lib/libQt5Core.so.5 ...
如果Logics 类独立于Qt 我的意思是,当我删除QObject 时,错误就消失了。
但我不能将这个 Qt 库路径添加到 LD_LIBRARY_PATH,因为它会与系统安装的 Qt 库冲突。
所以我的问题 - 我如何使用我的自定义链接共享库从 QtCreator 运行我的主 UI 项目?
【问题讨论】:
标签: c++ linux qt dll shared-libraries