qt共享库概要

qt shared library (共享库)

是一个Qt层面的,对.so .dll的概括

建立库,按照向导进行即可

导出则是靠Q_DECL_EXPORT 和 Q_DECL_IMPORT。具体到工程中则是

MYSHAREDLIB_EXPORT void foo();

class MYSHAREDLIB_EXPORT MyClass... 

(1)库的输出形式;a分别输出到debug和release目录中,b在debug版本周加d进行区别,推荐后者。

a情况,不用进行任何特别设置即可;但client引用的LIB命令要按照不同条件设置

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/wxstyle/release -lwxstyle

else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/wxstyle/debug -lwxstyle

b情况,需要工程特别设置输出文件名字,形式和上述类似,具体格式可参考相关文档。

这里推荐使用qtcreator工程中的 qtLibraryName宏,和qtcreatorLibrary.pri文件,可以快捷达成上述目的

(2)库的使用

使用方式就是在pro文件中功过LIBS宏添加连接,然后在代码中使用 。

注:仅仅添加LIBS但不使用,是不会连接的,dependencywalker是看不见的。 

(3)*= 还是+=

对于LIBS命令,可以有几种表述方式

【a】直接使用式,简单,但不推荐,原因是目录结构死板,无法跨平台,灵活性不足。 

适用于无跨平台,由第三方提供的库。 

LIBS += -ka.lib 

LIBS += -l../debug/a.dll 

【b】双重指定,推荐,对于跨平台一般都能应对,

LIBS += -Lpath/dir -ldemodll

此种写法把目录和文件名分开,目录可以共用,文件名的扩展名有qmake自行处理

【c】复杂式,推荐,但如果没这方面需求可以不用

适用于有qt生成的dll,如果有跨平台需要更是推荐 

LIBS += -Lpath/dir

LIBS *= -ldemodll

动态链接库的pro中,如果使用VERSION,qmake会在文件名后自动加上其主版本号。

该方法在次情况下仍能正确工作,为qtcreator采用。 

但要忍受库后面有0,1,2,3等数字

(对与app无效,而且如果在app中增加,会导致无法找到lib) 

在动态链接库中增加

VERSION = 1.2.3

CONFIG += create_prl

对于静态库你需要的是

CONFIG += link_prl

经过上述设置之后,

a,dll中会自动带有version信息,并且dll的文件名会自动添加主版本号(包括0)

b,app会自动链接到不同版本的dll 。

c,避免dll-hell 

注意:如果不加CONFIG命令,可能会出现无法找到dll的情况。 对于TEMPLATE=app的工程,会自动增加CONFIG+= link_prl

参考 http://www.qtcn.org/bbs/apps.php?q=diary&uid=96534&a=detail&did=492 

http://blog.csdn.net/dbzhang800/article/details/6348432 

posted @ 2012-08-29 11:38  kevinzhwl  阅读(457)  评论(0编辑  收藏  举报