首页 文章

Qt链接Visual Studio 2010中的共享库

提问于
浏览
0

我正在开发一个项目,我必须 grab 一些类并将它们放入共享库中 . 共享库负责REST调用,并将由主项目使用 .

共享库的* .pro文件如下所示:

QT       += network

QT       -= gui

TARGET = MyQtFramework
TEMPLATE = lib

DEFINES += MY_LIBRARY

SOURCES += \
    storageprovider.cpp \
    handler.cpp

HEADERS += \
        myframework_global.h \
    storageprovider.h \
    handler.h 

INCLUDEPATH += "../Shared"
INCLUDEPATH += "E:\src\Lib\Boost\Current"
INCLUDEPATH += "E:\src\Lib\CryptLite\Current"
INCLUDEPATH += "E:\QT"

LIBS += -L"E:\src\Lib\Boost\Current"

Visual Studio的命令行如下所示:

/OUT:"debug\MyQtFramework.dll“/ NOLOGO /LIBPATH:"E:\QT\4.8.0\lib”/ LIBPATH:“E:\ src \ Lib \ Boost \ Current”/ LIBPATH:“E:\ src \ Lib \ Boost \ Current \ lib \ debug“/ DLL”E:\ QT \ 4.8.0 \ lib \ QtNetworkd4.lib“”E:\ QT \ 4.8.0 \ lib \ QtCored4.lib“”kernel32.lib “”user32.lib“”gdi32.lib“”winspool.lib“”comdlg32.lib“”advapi32.lib“”shell32.lib“”ole32.lib“”oleaut32.lib“”uuid.lib“”odbc32.lib “”odbccp32.lib“/ MANIFEST /ManifestFile:"Win32\MyQtFramework.dll.intermediate.manifest”/ ALLOWISOLATION / MANIFESTUAC:“level ='asInvoker'uiAccess ='false'”/ DEBUG / PDB:“PROJECTPATH \ debug \ MyQtFramework .pdb“/PDD:"PROJECTPATH\debug\MyQtFramework.pgd”/ TLBID:1 / DYNAMICBASE / NXCOMPAT / MACHINE:X86 / ERRORREPORT:QUEUE

在这里,我看不到任何指定它是库以及如何导出的标志 .

然后,我为共享库“g_global.h”创建一个全局 Headers :

#ifndef G_GLOBAL_H
#define G_GLOBAL_H

#include <QtCore/qglobal.h>

 #if defined(MY_LIBRARY)
 #  define SHARED_EXPORT_IMPORT Q_DECL_EXPORT
 #else
 #  define SHARED_EXPORT_IMPORT Q_DECL_IMPORT
 #endif
 #endif

我所有的其他 Headers 文件看起来像这样:

#include "g_global.h"

 class SHARED_EXPORT_IMPORT storageProvider : public QObject {
     ....

到目前为止这么好吧?这在Visual Studio 2010中编译,不会出现任何错误 . 问题是当我尝试在我的主项目中使用它时 . 然后我将INCLUDEPATH和LIBS,包含路径指向共享库的头文件所在的位置以及* .lib文件所在的Libs . 这些设置在visual studio属性页上完成,而不是在* .pro文件中完成 .

我包括全局 Headers ,它可以工作 . 当我包含“storageProvider.h”时,我得到7个链接错误,这里有两个错误:

错误6错误LNK2001:未解析的外部符号“public:virtual int __thiscall storageProvider :: qt_metacall(enum QMetaObject :: Call,int,void * *)”(?qt_metacall @ storageProvider @@ UAEHW4Call @ QMetaObject @@ HPAPAX @ Z)E错误2错误LNK2019:未解析的外部符号“_declspec(dllimport)public:void thiscall storageProvider :: put(class QString const&,class QString const&,class QPointer,int)”( imp?put @ storageProvider @@ QAEXABVQString @@ 0V ?$ QPointer @ VQIODevice @@@@ H @ Z)在函数“public:void __thiscall FileUploader :: uploadNext(void)”中引用(?uploadNext @ FileUploader @@ QAEXXZ)

我不知道如何能够包含storageProvider并使用它 .

注意:我重命名了所有的函数和类,所以如果出现问题,请指出它,但这可能只是我在重命名时所犯的错误 .

主项目的命令行:

/OUT:"debug\myapp.exe“/ NOLOGO /LIBPATH:"E:\QT\4.8.0\lib"/LIBPATH:"e:\QT\4.8.0\lib”/ LIBPATH:“E:\ src \ Lib \ Boost \ Current“/ LIBPATH:”E:\ src \ Lib \ Boost \ Current \ lib \ debug“/ LIBPATH:”FILEPATH \ MyQtFramework \ Debug“”E:\ QT \ 4.8.0 \ lib \ qtmaind .lib“”E:\ QT \ 4.8.0 \ lib \ QtDeclaratived4.lib“”E:\ QT \ 4.8.0 \ lib \ QtGuid4.lib“”E:\ QT \ 4.8.0 \ lib \ QtNetworkd4.lib “”E:\ QT \ 4.8.0 \ lib \ QtCored4.lib“”kernel32.lib“”user32.lib“”gdi32.lib“”winspool.lib“”comdlg32.lib“”advapi32.lib“”shell32 . lib“”ole32.lib“”oleaut32.lib“”uuid.lib“”odbc32.lib“”odbccp32.lib“/ MANIFEST /ManifestFile:"Win32\myapp.exe.intermediate.manifest”/ ALLOWISOLATION / MANIFESTUAC:“level ='asInvoker'uiAccess ='false'“/ DEBUG /PDB:"FILEPATH\myapp\debug\myapp.pdb”/ SUBSYSTEM:WINDOWS /PDD:"FILEPATH\myapp\debug\myapp.pgd“/ TLBID:1 / DYNAMICBASE / NXCOMPAT / MACHINE:X86 / ERRORREPORT:队列

1 回答

  • 2

    在为 myapp.exe 的创建发布的命令行中,我看到了libpath的配置, /LIBPATH:"FILEPATH\MyQtFramework\Debug" 但是我没有看到 MyQtFramework.lib 作为输入文件 .

    您还需要指定它 .

相关问题