2012-03-13 26 views
0

私はいくつかのクラスをつかんで共有ライブラリに入れなければならないプロジェクトに取り組んでいます。共有ライブラリはREST呼び出しを処理し、メインプロジェクトで使用されます。Qt Visual Studio 2010の共有ライブラリ

*共有ライブラリのための.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 \デバッグ "/ 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 "" o "dbccp32.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」のグローバルヘッダーを作成します。

#include "g_global.h" 

class SHARED_EXPORT_IMPORT storageProvider : public QObject { 
    .... 

これまでのところは良い右:

#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 

そして、すべて私の他のヘッダファイルは次のようになりますか?これはVisual Studio 2010でコンパイルされ、エラーは発生しません。問題は私のメインプロジェクトでそれを使用しようとするときです。私はINCLUDEPATHとLIBSのincludeパスが、共有ライブラリのヘッダファイルの場所と、* .libファイルのあるLibを指しています。これらの設定は* .proファイルではなく、ビジュアルスタジオのプロパティページで行います。

私は動作するグローバルヘッダを含んでいます。私が含まれている場合、 "storageProvider.hは、" 私はここで、7リンクエラーを取得し、それらの2つです:

エラー6エラーLNK2001:未解決の外部シンボル「パブリック:仮想int型__thiscall storageProvider :: qt_metacall(列挙型QMetaObject :: )* *無効、int型、コール "(qt_metacall @ storageProvider @@ UAEHW4Call @ QMetaObject @@ HPAPAX @ Z)E

エラー2エラーLNK2019:未解決の外部シンボル" __declspec(dllimportの)パブリックます:void _ thiscall storageProvider :: put(クラスQString const &、クラスQString const &、クラスQPointer、クラスQPointer、int) "(_imp_?put @ storageProvider @@ QAEXABVQString @@V?$ QPointer @ VQIODevice @@@@ H @ Z)慰め "公共:無効__thiscall FileUploader :: uploadNext(無効)"(?uploadNext @ FileUploader @@ QAEXXZ)

私はstorageProviderが含まれており、それを使用できるようにする方法がわかりません。

注意:私はすべての関数とクラスの名前を変更しました。何か間違っていると思われる場合は、それを指摘してください。ただし、名前を変更したときに間違っていたかもしれません。主なプロジェクトのための

コマンドライン:

/OUT:"debug\myapp.exe "/ NOLOGO /LIBPATH:"E:\QT\4.8.0\lib"/LIBPATH: "E:\ LIBパス: "E:¥src¥Lib¥Boost¥Current"/LIBPATH: "E:¥src¥Lib¥Boost¥Current¥lib¥debug"/LIBPATH: "FILEPATH¥MyQtFramework¥QT¥4.8.0¥lib"デバッグ "" 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。 "/ /マニフェスト/マニフェストファイル:" Win32 \ lib "" com32.lib "" com32.lib "" com32.lib "" com32.lib "" shell32.lib "" ole32.lib "" oleaut32.lib "" uuid.lib "" odbc32.lib "" odbccp32.lib " myapp.exe.intermediate.manifest "/ ALLOWISOLATION/MANIFESTUAC:" level = 'asInvoker' uiAccess = 'false' "/DYNAMICBASE/NXCOMPAT/MACHINE:X86/ERRORREPORT:QUEUE/DEBUG /PDB:"FILEPATH\myapp\debug\myapp.pdb "/サブシステム:WINDOWS /PGD:"FILEPATH\myapp\debug\myapp.pgd"/TLBID:1/DYNAMICBASE/NXCOMPAT/MACHINEコマンドラインで

+0

* .libファイルがある場所にパスを設定しましたが、その.libファイルを入力として実際に使用するようにビルドを構成しましたか? 2つのものは関連していますが、異なっています。 –

+0

LIBS + = -lMyQtFramework? – chikuba

+0

'myapp.exe'をビルドするために' .pro'ファイルを使用していないとお伝えしましたか? –

答えて

2

あなたは、私がLIBPATH foの設定を参照してくださいmyapp.exeの作成を掲載/LIBPATH:"FILEPATH\MyQtFramework\Debug"が、私は、入力ファイルとしてMyQtFramework.lib表示されません。

これも指定する必要があります。

+0

ありがとうございます。それは今構築する。しかし、私は "project to qmake generated project"をクリックしたときに何をしたのかわからないのですか? – chikuba

+0

Config - > Linker - > Input - > Additional dependesisに行ってlibファイルを追加しました。また、共有のlibs .dllをメインアプリケーションと同じフォルダに追加する必要がありました – chikuba

+0

申し訳ありませんが、私はVS用のQtプラグインを使用していたので、しばらくしていましたが、現時点ではインストールされていません。それについての詳細を手伝うことはできません。 –

関連する問題