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 -lwxstyleelse: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