一.创建动态库

  1. 编写一个共享库类,比如:

    //..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;
    }
  2. 修改(1)的.pro文件
    //..base.pro
    QT       += core
    QT       -= gui
    
    TEMPLATE = lib
    TARGET = base
    SOURCES += base.cpp
    HEADERS += base.h
    DEFINES += BASE
  3. qmake,make产生动态库libbase

二.使用动态库

  1.   修改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
  2. 使用libbase
    #include "base.h" //注意需要添加响应头文件
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        Base b;
        b.PrintLog(");
        return a.exec();
    }
  3. 完成.

三.记录有关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动态库的创建和使用的更多相关文章

  1. Qt——动态库的创建和使用

    一.动态库是什么 很多人写程序的人都见过.lib和.dll文件,对动态库也略有耳闻. 生成动态库后可以得到两个文件,后缀名分别是.lib以及.dll. 简而言之,.lib称为导入库,相当于头文件:.d ...

  2. Windows下静态库与动态库的创建与使用

    Windows下静态库与动态库的创建与使用 学习内容:本博客介绍了Windows下使用Visual C++ 6.0制作与使用静态库与动态库的方法. --------CONTENTS-------- 一 ...

  3. qt动态库实现无边框窗体的消息处理 nativeEvent的使用

    需求: 在动态库中创建一个窗口句柄,可以给外部调用,库的调用者,通过这个句柄发送消息到底层库,库里面可以实现对消息的处理 m_FHandle=AllocateHWnd(WndProcDllMsg); ...

  4. 深入理解LINUX下动态库链接器/加载器ld-linux.so.2

    [ld-linux-x86-64.so.2] 最近在Linux 环境下开发,搞了好几天 Compiler 和 linker,觉得有必要来写一篇关于Linux环境下 ld.so的文章了,google上搜 ...

  5. 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH

    谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH  PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...

  6. Linux下动态库生成和使用

    Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...

  7. Linux生成动态库系统

    Linux生成动态库系统 一个.说明 Linux下动态库文件的扩展名为 ".so"(Shared Object). 依照约定,全部动态库文件名称的形式是libname.so(可能在 ...

  8. Windows下静态库、动态库的创建和调用过程

    静态库和动态库的使用包括两个方面,1是使用已有的库(调用过程),2是编写一个库供别人使用(创建过程).这里不讲述过多的原理,只说明如何编写,以及不正确编写时会遇见的问题. //注:本文先从简单到复杂, ...

  9. DLL动态库的创建,隐式加载和显式加载

    动态库的创建 打开VS,创建如下控制台工程,工程命名为DllTest: 在弹出的对话框中选择"DLL"后单击"完成"按钮: 在工程中新建DllTest.h和Dl ...

随机推荐

  1. h5 本地存储和读取信息

    总结:cookie的缺点很明显,最多只能存储4KB的数据,每个HTTP请求都会被传送回服务器,明文传输(除非你使用SSL)对于购物网站而言,cookie是非常重要的,为了实现购物车功能,把已选物品加入 ...

  2. 我们无法找到服务器加载工作簿的数据模型"的 SharePoint 网站,当您刷新 Excel 2013 工作簿中的数据透视表时出错

    假定您使用 Analysis Services 源在 Microsoft Excel 2013 中创建数据透视表.将 Excel 工作簿上载到 Microsoft SharePoint 网站中.当您尝 ...

  3. 哈希(Hask)

     编辑 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射 ...

  4. digitalocean

    sudo apt-get install sshifconfigssh 198.211.102.203sudo adduser uernameubuntu装配SSH,支持开启sftp服务 sftp 1 ...

  5. 神奇的NOIP模拟赛 T2 LGTB 学分块

    LGTB 学分块 LGTB 最近在学分块,但是他太菜了,分的块数量太多他就混乱了,所以只能分成3 块今天他得到了一个数组,他突然也想把它分块,他想知道,把这个数组分成3 块,块可以为空.假设3 块各自 ...

  6. 关于Tcp,为什么一定要进行三次握手呢?

    主要是防止已经失效的请求报文段突然又传送到了服务端而产生的连接的误判. 考虑如下的情况:客户端发送了一个连接请求报文段到服务端,但是在某些网络节点上长时间滞留了,而后客户端又超时重发了一个连接请求报文 ...

  7. 2、IValueConverter应用

    1.C#代码如下: public class logotoimgConverter:IValueConverter { //将logo转换为URI public object Convert(obje ...

  8. switch… case 语句的用法(一)

    public class Test7 { public static void main(String[] args) { int i=5; switch(i) { case 1: System.ou ...

  9. PHP里10个鲜为人知但却非常有用的函数

    levenshtein() 你有没有经历过需要知道两个单词有多大的不同的时候,这个函数就是来帮你解决这个问题的.它能比较出两个字符串的不同程度. 用法: <?php $str1 = " ...

  10. BestCoder Round #1

    逃生 反向拓扑+优先队列+逆序输出 这里要注意,题中要求的不是输出字典序,而是要编号小的尽量考前(首先1尽量考前,然后2尽量考前..). 比如说 约束是 4->1,3->2,字典序答案就是 ...