Linux Qt动态库的创建和使用
一.创建动态库
- 编写一个共享库类,比如:
//..base.h class Base : public QObject { Q_OBJECT public: ); void PrintLog(QString); }; //..bash.cpp Base::Base(QObject *parent) : QObject(parent) { } void Base::PrintLog(QString s) { qDebug()<<s; }
- 修改(1)的.pro文件
//..base.pro QT += core QT -= gui TEMPLATE = lib TARGET = base SOURCES += base.cpp HEADERS += base.h DEFINES += BASE
- qmake,make产生动态库libbase
二.使用动态库
- 修改test.pro
QT += core #需要自己看着办 QT -= gui # TARGET = test CONFIG += console CONFIG -= app_bundle TEMPLATE = app #INCLUDEPATH:应用程序所需的额外的包含路径列表 INCLUDEPATH += ./lib #注:此时lib放在编译目标地址的源目录下面 #DEPENDPATH:应用程序所依赖的搜索路径 DEPENDPATH += ./lib #-L添加目录,-l指定共享库名称 LIBS += -L./lib -lbase SOURCES += main.cpp
- 使用libbase
#include "base.h" //注意需要添加响应头文件 int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Base b; b.PrintLog("); return a.exec(); }
- 完成.
三.记录有关qmake的编译项说明(来源:http://www.cnblogs.com/yuohoo/archive/2013/03/11/2954631.html):
一、TEMPLATE变量:
生成Makefile采用的模板。以下是可供选择的模板:
app:建立一个应用程序Makefile,这个也是默认值,没有指定模板是默认是这个。
lib:建立一个库的Makefile。
vcapp:建立一个应用程序的visual studio项目文件。
vclib:建立一个库的visual studio项目文件。
subdirs:创建一个能够进入子目录并且为之生成为它调用make的Makefile。需要在后面用SUBDIRS=XX来指定那些子目录。
1、app模板:
app模板告诉qmake为建立一个应用程序生成一个Makefile。当使用这个模板时,下面这些qmake系统变量是被承认的。你应该在你的.pro文件中使用它们来为你的应用程序指定特定信息。
HEADERS:需要包含的头文件的列表。
SOURCES:需要的源文件的列表。
FORMS:需要的.ui文件的列表。
LEXSOURCES:所有lex源文件的列表。
YACCSOURCES:所有yacc源文件的列表。
TARGET:可执行应用程序的名称。默认值为项目文件的名字。
DESTDIR:放置可执行程序目标的目录。
OBJECTS_DIR:放置obj中间文件的目录。
MOC_DIR: moc转换文件路径。
RCC_DIR: 资源文件路径。
UI_DIR:ui文件转换的路径。
RESOURCES:需要包含的资源文件。
LIBS:依赖库的路径和名称 -L{xxdirxx} -l{xxnamexx}。
LIBEXT: 产生lib的后缀。
DEFINES:应用程序所需的额外的宏定义列表。
INCLUDEPATH:应用程序所需的额外的包含路径列表。
DEPENDPATH:应用程序所依赖的搜索路径。
VPATH:寻找补充文件的搜索路径。
DEF_FILE:只有Windows需要:应用程序所要连接的.def文件。
RC_FILE:只有Windows需要:应用程序的资源文件。
RES_FILE:只有Windows需要:应用程序所要连接的资源文件。
TRANSLATIONS: 多国语言支持文件。
INSTALLS: 要安装的文件。
target.path: 安装的路径。
详细请参考Qt帮助条目:qmake Variable Reference。
2、lib模板:
lib模板告诉qmake为建立一个库而生成makefile。当使用这个模板时,除了“app”模板中提到系统变量,还有一个VERSION是被支持的。你需要在为库指定特定信息的.pro文件中使用它们。
VERSION:目标库的版本号,例如:1.2.3。
3、subdirs模板:
subdirs模板告诉qmake生成一个makefile,它可以进入到特定子目录并为这个目录中的项目文件生成makefile并且为它调用make。这个模板只有一个系统变量SUBDIRS可以被识别。
SUBDIRS:这个变量中包含了所要处理的含有项目文件的子目录的列表。这个项目文件的名称是和子目录同名的,这样qmake就可以发现它。例如,如果子目里是“subapp”,那么在这个目录中的项目文件应该被叫做subapp.pro。
二、CONFIG变量:
配置变量,指定了编译器所要使用的选项和所需要链接的库。
1、控制编译器标志的选项:
release:应用程序将以release模式连编,如果“debug”被指定,它将被忽略。
debug:应用程序将以debug模式连编。
warn_on:编译器会输出尽可能多的警告信息,如果“warn_off”被指定,它将被忽略。
warn_off:编译器会输出尽可能少的警告信息。
2、控制需要连接的库的选项:
qt:应用程序是一个Qt应用程序,并且Qt库将会被链接。
thread:应用程序是一个多线程程序。
x11:应用程序是一个x11应用程序或者库。
windows:只用于app模板,应用程序是一个windows下的窗口应用程序。
console:只用于app模板,应用程序是一个windows下的控制台应用程序。
dll:只用于lib模板,库是一个共享库。
staticlib:只用于lib模板,库是一个静态库。
plugin:只用于lib模板,库是一个插件,这将会使dll选项生效。
例如:CONFIG += qt debug,使用qt库的应用程序,debug版本。
3、注意事项:必须使用“+=”,不要使用“=”,否则原来的设置会被清除。
三、变量用法:
1、自定义变量:
MY_VARIABLE = value
定义了一个变量MY_VARIABLE,并将值设置为value。
2、变量值的传递:
可以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量。例如:
MY_DEFINES = $$DEFINES
现在MY_DEFINES变量包含了项目文件在这点时DEFINES变量的值。这也和下面的语句一样:
MY_DEFINES = $${DEFINES}
- 环境:UBuntu14.04 LTS
- 来源:http://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application
Linux Qt动态库的创建和使用的更多相关文章
- Qt——动态库的创建和使用
一.动态库是什么 很多人写程序的人都见过.lib和.dll文件,对动态库也略有耳闻. 生成动态库后可以得到两个文件,后缀名分别是.lib以及.dll. 简而言之,.lib称为导入库,相当于头文件:.d ...
- Windows下静态库与动态库的创建与使用
Windows下静态库与动态库的创建与使用 学习内容:本博客介绍了Windows下使用Visual C++ 6.0制作与使用静态库与动态库的方法. --------CONTENTS-------- 一 ...
- qt动态库实现无边框窗体的消息处理 nativeEvent的使用
需求: 在动态库中创建一个窗口句柄,可以给外部调用,库的调用者,通过这个句柄发送消息到底层库,库里面可以实现对消息的处理 m_FHandle=AllocateHWnd(WndProcDllMsg); ...
- 深入理解LINUX下动态库链接器/加载器ld-linux.so.2
[ld-linux-x86-64.so.2] 最近在Linux 环境下开发,搞了好几天 Compiler 和 linker,觉得有必要来写一篇关于Linux环境下 ld.so的文章了,google上搜 ...
- 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH
谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...
- Linux下动态库生成和使用
Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...
- Linux生成动态库系统
Linux生成动态库系统 一个.说明 Linux下动态库文件的扩展名为 ".so"(Shared Object). 依照约定,全部动态库文件名称的形式是libname.so(可能在 ...
- Windows下静态库、动态库的创建和调用过程
静态库和动态库的使用包括两个方面,1是使用已有的库(调用过程),2是编写一个库供别人使用(创建过程).这里不讲述过多的原理,只说明如何编写,以及不正确编写时会遇见的问题. //注:本文先从简单到复杂, ...
- DLL动态库的创建,隐式加载和显式加载
动态库的创建 打开VS,创建如下控制台工程,工程命名为DllTest: 在弹出的对话框中选择"DLL"后单击"完成"按钮: 在工程中新建DllTest.h和Dl ...
随机推荐
- 数据库索引<二> 补充前篇
你要准备的软件有: 最新版 Rsync for windows 服务端:cwRsync_Server_2.1.5_Installer.zip 客户端:cwRsync_2.1.5_Installer.z ...
- lock关键字理解
>可以把lock关键字可以看成 try{ Monitor.Enter(x); //.. } finally{ Monitor.Exit(x); } 这样子的结构,当然使用lock关键字更方便 & ...
- struts2拦截器与过滤器
转载:http://www.cnblogs.com/JohnLiang/archive/2011/12/15/2288376.html 过滤器,是在java web中,你传入的request,resp ...
- PHP 单引号和双引号的区别
$a = 'jfdjaff';$b = '234125';$c = '"jj $a $b"'.PHP_EOL;echo $c;$c = 'jj $a $b'.PHP_EOL;ech ...
- Entity Framework 复杂类型
为了说明什么是复杂属性,先举一个例子. public class CompanyAddress { public int ID { get; set; } public string Compan ...
- Zabbix源码包安装
Zabbix源码包安装 Cenos5.3 Basic server 安装顺序 Libxml2 Libmcrypt Zlib Libpng Jpeg:需要创建目录jpeg /bin /lib / ...
- WP8.1 Study2:MapControl控件的应用
总的界面布局如下:
- Hibernate中的集合映射
1.定义实体 public class User { private int userId; private String userName; private Set<String> ad ...
- CSS盒子模型和IE浏览器
CSS盒模型图解 下面是一幅关于应用了CSS的元素是如何显示它的尺寸的图示. 在本篇文章中,所有的浏览器在计算盒模型总宽度时处理margin属性的方式都是一致的,所以我们将更多的精力放在padding ...
- JAVA学习1
以前学过JAVA,但是长时间不用又给忘了,趁着还有时间回顾一下. 一切皆是对象.