ubuntu系统启动qtceator时提示:Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so: 无法加载库 2016-10-23 23

本文介绍了一种在Ubuntu系统中解决Qt Creator启动时遇到的错误的方法。通过安装几个必要的库文件,可以解决Qt Creator插件加载失败的问题。

在ubuntu系统下安装好qt5.5后启动qtceator时提示:
Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so: 无法加载库Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so:(libgstapp-0.10.so.0: 无法打开共享对象文件: 没有那个文件或目录)

解决方法:
终端命令:

sudo apt-get install libqt4-dev
sudo apt-get install libgstreamer0.10-dev
sudo apt-get install libgstreamer-plugins-base0.10-dev
  • 1
  • 2
  • 3
  • 4

再启动QT就OK了。

<think>我们参考引用的内容,特别是引用[1][2][3][4]中关于Qt Creator创建和调用动态链接的步骤。 用户问题:如何将一个程序中的方法封装为动态,并供原程序使用? 步骤分解: 1. 创建动态项目 2. 在动态项目中编写要导出的类或函数(注意导出符号的声明) 3. 构建动态,生成.so(Linux)或.dll(Windows)文件以及相应的头文件 4. 在原程序项目中添加动态的头文件路径和文件路径 5. 在原程序中包含头文件并使用动态中的类或函数 详细步骤: 第一步:创建动态项目 - 打开Qt Creator,选择“新建项目” - 选择“Library” -> “C++ Library” - 选择“共享”类型 - 设置项目名称和路径,然后按照向导完成创建。 第二步:编写动态代码 - 在动态项目中,会生成一个头文件(例如mydynamiclibrary.h)和一个源文件(例如mydynamiclibrary.cpp)。 - 在头文件中,使用预定义宏来声明导出符号。例如: #ifndef MYDYNAMICLIBRARY_H #define MYDYNAMICLIBRARY_H #include "mydynamiclibrary_global.h" class MYDYNAMICLIBRARYSHARED_EXPORT MyDynamicLibrary { public: MyDynamicLibrary(); void test(); int add(int a, int b); }; #endif // MYDYNAMICLIBRARY_H - 注意:在创建动态项目Qt Creator会自动生成一个全局头文件(如mydynamiclibrary_global.h),其中定义了导出宏(例如MYDYNAMICLIBRARYSHARED_EXPORT)。这个宏用于在编译标记导出符号。 - 在源文件中实现这些方法。 第三步:构建动态 - 点击构建(Build)按钮,生成动态文件(在构建目录中,如debug或release文件夹下)。 - 生成的动态文件:在Linux下为lib*.so,在Windows下为*.dll,同还会生成一个与平台无关的链接文件(Linux下为.so符号链接,Windows下为.lib导入)。 第四步:在原程序中使用动态 - 将动态项目生成的头文件(如mydynamiclibrary.h和mydynamiclibrary_global.h)复制到原程序项目的某个目录(如include)。 - 将动态文件(.so.dll)复制到原程序项目的目录(如lib)或者系统路径,或者可执行文件所在目录(运行需要)。 - 在原程序项目的.pro文件中添加引用: INCLUDEPATH += $$PWD/include LIBS += -L$$PWD/lib -lmydynamiclibrary # 注意:-L后面是文件所在目录,-l后面是文件名(去掉前缀lib和后缀.so,如libmydynamiclibrary.so则写为-lmydynamiclibrary) - 在代码中包含头文件并使用: #include "mydynamiclibrary.h" ... MyDynamicLibrary lib; lib.test(); int result = lib.add(1, 2); 注意:在运行,需要确保动态文件在系统路径中,或者放在可执行文件所在目录。 根据引用[2]和[4]中的例子,我们还可以看到,在调用动态,可以直接在代码中创建动态中定义的类的对象,并调用其方法。 相关问题: 1.Qt Creator中创建动态,如何正确导出类或函数? 2. 动态在Windows和Linux平台下有何不同?如何实现跨平台? 3. 如何解决动态版本兼容性问题? 4. 动态在运行加载失败的可能原因有哪些?</think>### 在Qt Creator中将方法封装为动态并调用的完整步骤 #### **1. 创建动态项目** - **步骤**: 1. 打开Qt Creator → 新建项目 → **Library** → 选择 **C++ Library**。 2. 类型选择 **共享**(Shared Library),设置项目名称(如 `MyDynamicLib`)。 3. 在自动生成的全局头文件(如 `mydynamiclib_global.h`)中定义导出宏: ```cpp #ifndef MYDYNAMICLIB_GLOBAL_H #define MYDYNAMICLIB_GLOBAL_H #include <QtCore/qglobal.h> #if defined(MYDYNAMICLIB_LIBRARY) #define MYDYNAMICLIBSHARED_EXPORT Q_DECL_EXPORT #else #define MYDYNAMICLIBSHARED_EXPORT Q_DECL_IMPORT #endif #endif ``` 4. 在功能类头文件中声明导出类/函数(示例 `mylib.h`): ```cpp #include "mydynamiclib_global.h" class MYDYNAMICLIBSHARED_EXPORT MyLib { public: void test(); // 导出方法 int add(int a, int b); // 导出方法 }; ``` 5. 在源文件(如 `mylib.cpp`)中实现功能: ```cpp #include "mylib.h" void MyLib::test() { qDebug() << "Dynamic Library Loaded!"; } int MyLib::add(int a, int b) { return a + b; } ``` #### **2. 构建动态** - 点击 **构建**(Build),生成以下文件: - **Linux**: `libMyDynamicLib.so` - **Windows**: `MyDynamicLib.dll` + `MyDynamicLib.lib`(或 `.a`) - 关键文件路径:`构建目录/debug` 或 `构建目录/release`。 #### **3. 在原程序中调用动态** - **步骤**: 1. **复制文件**: - 将动态文件(`.so`/`.dll`)放入原程序的运行目录(如 `程序/bin`)。 - 将头文件(`mylib.h` 和 `mydynamiclib_global.h`)放入原程序的 `include` 目录。 2. **修改原程序的 `.pro` 文件**: ```qmake # 添加头文件路径 INCLUDEPATH += $$PWD/include # 链接动态(Linux示例) LIBS += -L$$PWD/lib -lMyDynamicLib # Windows示例 # LIBS += -L$$PWD/lib -lMyDynamicLib.lib ``` 3. **在代码中调用**: ```cpp #include "include/mylib.h" // 包含动态头文件 void MainWindow::onButtonClick() { MyLib lib; // 创建动态对象 lib.test(); // 调用方法 int sum = lib.add(3, 5); // 输出结果:8 } ``` #### **4. 解决常见问题** - **运行加载失败**: - **Windows**:将 `.dll` 文件放入可执行文件(`.exe`)同级目录。 - **Linux**:设置路径: ```bash export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH ``` - **符号未导出**:确保所有导出类/函数使用 `MYDYNAMICLIBSHARED_EXPORT` 宏。 - **头文件路径错误**:检查 `.pro` 中的 `INCLUDEPATH` 是否指向正确的 `include` 目录。 #### **动态 vs 静态** | **特性** | **动态** | **静态** | |----------------|----------------------------------------|-------------------------------| | **文件大小** | 程序体积小(函数运行加载) | 程序体积大(函数编译进程序) | | **更新维护** | 修改无需重新编译主程序[^2] | 需重新编译整个项目 | | **内存占用** | 多个程序可共享同一内存副本 | 每个程序独立加载 | | **依赖管理** | 需确保运行环境有文件 | 无需外部依赖 | --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值