2016-11-29 1 views
0

Qt 응용 프로그램 (qtapp)의 일부 기능을 테스트하기 위해 Qt 응용 프로그램을 lib/dll 라이브러리로 빌드합니다. ctor 및 dtor가 라이브러리에서 올바르게 내보내졌습니다. 그러나 테스트 프로젝트 (consoleTest라는 Qt는 콘솔 프로젝트)를 컴파일하면 항상 다음 링크 오류로 실행 :Qt 애플리케이션을 참조하는 방법은 무엇입니까?

링크 : 1> Bibliothek "C : \ 사용자 \ GMBH 테스트 \ \ 64 \ 디버그 \ consoleTest. lib "및 Objekt C : \ Users \ gmbh \ test \ x64 \ Debug \ consoleTest.exp"werden erstellt 1> moc_testFour.obj : 오류 LNK2001 : Nicht aufgelöstes externes 기호 "public : 정적 구조체 QMetaObject const qtapp :: staticMetaObject "staticMetaObject const qtapp :: staticMetaObject"("staticMetaObject @ qtapp @@ 2UQMetaObject @@ B") "> testFour.obj : 오류 LNK2001 : Nicht aufgelöstes externes 기호"public : 정적 구조체 QMetaObject const qtapp :: staticMetaObject "(? staticMetaObject @ qtapp @@ 2UQMetaObject @B) ". 1> C : \ Users \ gmbh \ test \ x64 \ Debug \ consoleTest.exe : 치명적인 오류 LN K1120 : 1 nicht의 aufgelöste Externe

Qt는 응용 프로그램은 매우 간단합니다 :

#ifndef QTAPP_H 
#define QTAPP_H 

#include <QtWidgets/QMainWindow> 
#include "ui_qtapp.h" 

class __declspec(dllexport) qtapp : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    qtapp(QWidget* parent = 0); 
    ~qtapp(); 

private: 
    Ui::qtappClass ui; 
}; 

#endif // QTAPP_H 

구현 : 나는 단순히 테스트 프로젝트에 #include "qtapp.h" 포함하는 경우

#include "qtapp.h" 

__declspec(dllexport) qtapp::qtapp(QWidget* parent) 
    : QMainWindow(parent) 
{ 
    ui.setupUi(this); 
} 

__declspec(dllexport) qtapp::~qtapp() 
{ 

} 

는, 컴파일러는 위의 산출 오류.

내 질문 : 오류의 원인은 무엇

  • ?
  • Qt 응용 프로그램을 lib로 올바르게 배포하는 방법은 무엇입니까?

제 컴파일러는 비주얼 스튜디오 2013, Qt는 실제로 Qt는 무관 한 질문 5.4.2

답변

1

의 버전이 있습니다. 라이브러리와 응용 프로그램을 연결할 때 대신 __declspec(dllimport)이 있어야합니다.

이를 달성하기 위해 일반적으로 라이브러리를 링크 할 때와 응용 프로그램을 라이브러리에 링크 할 때 변경되는 정의를 사용합니다. Microsoft는 "Importing into an Application Using __declspec(dllimport)"에 관한 도움말 페이지를 가지고 있습니다.

Qt documentation은 다른 것을 제공합니다. Qt가 도움이 될 수있는 한 가지는 __declspec을 플랫폼 간 Q_DECL_IMPORT으로 대체하는 것입니다.

+0

내 생각에, 당신은 내 목적을 이해하지 못합니다. 위의 qtapp는 실제로는 더미 프로젝트입니다. 내 최종 목표는 내 Qt 응용 프로그램에서 일부 기능을 테스트하는 것입니다. 이 속도로 Qt 응용 프로그램은 dll에서 처음으로 ** 내보낼 것입니다. 나중에 ** 테스트 프로젝트에서 ** 가져오고 ** 원하는 dll 함수가 호출되고 확인됩니다. – euroswenwickler

+0

예제 코드를 사용하면 테스트 프로젝트에'qtapp.h'를 포함 시키면'__declspec (dllimport) '대신'__declspec (dllexport)'가 잘못 표시됩니다. 나는 더 완전한 예가 없으면 그 밖의 무엇이 잘못 될지 알 수 없다.) – E4z9

관련 문제