Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VisualStudio2010中的Qt链接共享库_C++_Visual Studio 2010_Qt_Shared Libraries - Fatal编程技术网

C++ VisualStudio2010中的Qt链接共享库

C++ VisualStudio2010中的Qt链接共享库,c++,visual-studio-2010,qt,shared-libraries,C++,Visual Studio 2010,Qt,Shared Libraries,我正在做一个项目,我必须抓取一些类并将它们放入一个共享库中。共享库负责REST调用,并将由主项目使用 共享库的*.pro文件如下所示: QT += network QT -= gui TARGET = MyQtFramework TEMPLATE = lib DEFINES += MY_LIBRARY SOURCES += \ storageprovider.cpp \ handler.cpp HEADERS += \ myfra

我正在做一个项目,我必须抓取一些类并将它们放入一个共享库中。共享库负责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中的命令行如下所示:

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"
/OUT:“debug\MyQtFramework.dll”/NOLOGO/LIBPATH:“E:\QT\4.8.0\lib”/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”“shell32.lib”“advole32.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”/PGD:“PROJECTPATH\DEBUG\MyQtFramework.PGD”/TLBID:1/DYNAMICBASE/NXCOMPAT/MACHINE:X86/ERRORREPORT:QUEUE

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

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

到目前为止还不错,对吗?这是在Visual Studio 2010中编译的,不会给出任何错误。问题是当我尝试在主项目中使用它时。然后我使用INCLUDEPATH和LIBS,其中include路径指向共享lib的头文件所在的位置和*.lib文件所在的LIBS。这些设置在Visual Studio pro上完成perty页,不在*.pro文件中

I包含全局标题,这很有效。当我包含“storageProvider.h”时,我会得到7个链接错误,其中有两个:

错误6错误LNK2001:未解析的外部符号“public:virtual int\u thiscall storageProvider::qt\u metacall(enum QMetaObject::Call,int,void**)”(?qt_metacall@storageProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z)E

错误2错误LNK2019:未解析的外部符号“\u declspec(dllimport)public:void\u thiscall storageProvider::put(类QString const&,类QString const&,类QPointer,int)”(\u imp?put@storageProvider@@QAEXABVQString@@0V$QPointer@VQIODevice@@@@H@Z)在函数“public:void\u thiscall FileUploader::uploadNext(void)”中引用(?uploadNext@FileUploader@@QAEXZ)

我不知道如何包括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\lib\debug”/LIBPATH:“FILEPATH\MyQtFramework\debug”“E:\QT\4.8.0\lib\qtmaind.lib”“E:\QT\4.8.0\lib\QT\declaratived4.lib”“E:\QT\QT\guid4.0\qt4.0\QT\network”E:\QT\4.8.0\lib\QtCored4.lib“kernel32.lib”“user32.lib”“gdi32.lib”“winspool.lib”“comdlg32.lib”“advapi32.lib”“shell32.lib”“ole32.lib”“uuid.lib”“odbc32.lib”“odbccp32.lib”“ManifestFile:“Win32\myapp.exe.intermediate.MANIFEST”/ALLOWISOLATION/MANIFESTUAC:“level='asInvoker'uiAccess='false'”/DEBUG/PDB:”FILEPATH\myapp\debug\myapp.pdb”/SUBSYSTEM:WINDOWS/PGD:“FILEPATH\myapp\debug\myapp.PGD”/TLBID:1/DYNAMICBASE/NXCOMPAT/MACHINE:X86/ERRORREPORT:QUEUE


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


您也需要指定它。

因此您配置了*.lib文件所在的路径,但是您是否配置了构建以实际使用该.lib文件作为输入?这两个东西是相关的,但不同的.LIBS+=-lMyQtFramework?我想您说过您没有使用
.pro
文件来构建
myapp.exe
?im不太确定.pro文件涉及多少内容。我使用它并将其导入visual studio,它尝试使用设置创建自己的文件。因此不确定发生了什么。我可以直接向命令行添加任何内容吗?谢谢。它现在正在生成。但是,您知道我在单击“将项目转换为qmake生成的项目”时做了什么吗"似乎无法从那里返回到Config prop->Linker->Input->Additional dependesis并在那里添加了lib文件。还必须将共享libs.dll添加到与主应用程序相同的文件夹中。对不起,我已经有一段时间没有为VS使用Qt插件了,目前还没有安装它,因此我无法帮助进行de我知道。
 #include "g_global.h"

 class SHARED_EXPORT_IMPORT storageProvider : public QObject {
     ....