私はいくつかのクラスをつかんで共有ライブラリに入れなければならないプロジェクトに取り組んでいます。共有ライブラリは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コマンドラインで
* .libファイルがある場所にパスを設定しましたが、その.libファイルを入力として実際に使用するようにビルドを構成しましたか? 2つのものは関連していますが、異なっています。 –
LIBS + = -lMyQtFramework? – chikuba
'myapp.exe'をビルドするために' .pro'ファイルを使用していないとお伝えしましたか? –