2012-06-16 4 views
2

나는, QT 창조주의 QT 프로젝트를 구축을 위해 노력하고, 빈 파일을 생성 moc.exe하지만 링크 오류가지고 있었어요 : 어떤 이유QT 오류와 관련된 type_traits

minecraftlauncher.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl Launcher::MinecraftLauncher::metaObject(void)const " ([email protected]@[email protected]@[email protected]@XZ) 
minecraftlauncher.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl Launcher::MinecraftLauncher::qt_metacast(char const *)" ([email protected]@[email protected]@[email protected]) 
minecraftlauncher.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl Launcher::MinecraftLauncher::qt_metacall(enum QMetaObject::Call,int,void * *)" ([email protected]@[email protected]@[email protected]@@[email protected]) 
debug\Launcher.exe : fatal error LNK1120: 3 unresolved externals 

, moc.exe을, 메타 오브젝트 컴파일러 빈 MOC를 생성 한 _ * CPP 파일을, 나는 그것이 QT 창조주에 실행되었던 플래그 명령 줄에서 moc를 실행 시도

:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/type_trait(0): Note: No relevant classes found. No output generated. 

오류 메시지와 함께 :.

C:\QtSDK\x64\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I"c:\QtSDK\x64\include\QtCore" -I"c:\QtSDK\x64\include\QtGui" -I"c:\QtSDK\x64\include" -I"c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include" -I"c:\QtSDK\x64\include\ActiveQt" -I"debug" -I"..\Launcher" -I"." -I"c:\QtSDK\x64\mkspecs\win32-msvc2005" -D_MSC_VER=1400 -DWIN32 ..\Launcher\minecraftlauncher.hpp -o debug\moc_minecraftlauncher.cpp 

그리고 같은 오류가 반환되었습니다. 하나씩 여러 개의 플래그를 제거하고 -I"c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include"으로 좁혔습니다. 어떤 이유로 디렉터리가 포함 경로에있을 때 "관련 클래스를 찾을 수 없습니다"오류가 표시되고 빈 .cpp 파일이 생성되었습니다. 그러나 해당 디렉토리가 이 아니고 포함 경로에이 아닌 경우 moc.exe가 정상적으로 작동합니다.

:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/include/type_trait(0)을 포함한 오류 메시지로 인해 인식되지 않도록 해당 위치에 type_traits 파일의 이름을 변경했습니다. 내가 그랬을 때, moc.exe는 정상적으로 다시 작동했다. (실제로 type_traits는 내가 포함했던 표준 라이브러리 파일의 어딘가에 포함되어있다. 그래서 오류가 type_traits I에 대한 type_traits을 알고 작은 것과

어딘가에 원인이되고, 나는 그것이 개체에 대한 형식 정보를 컴파일지고 함께 할 수있는 뭔가가 생각합니다. 하지만 왜 그것이 메타 객체 컴파일러를 잘못 만드는지 알 수 없습니다. 왜이 일을하는거야? 왜 type_traits와 함께 moc을하는지, 왜 그것과 무엇이 실패 했는가?

누군가가 제공 할 수있는 통찰력에 대해 매우 고마워 할 것입니다. 이것은 저에게 매우 당혹 스럽습니다.

minecraftlauncher.hpp 파일 :

#ifndef MINECRAFTLAUNCHER_HPP 
#define MINECRAFTLAUNCHER_HPP 

#include <QMainWindow> 
namespace Launcher { 
    class MinecraftLauncher : public QMainWindow 
    { 
     Q_OBJECT 

    public: 
     explicit MinecraftLauncher(QWidget *parent = 0); 
     ~MinecraftLauncher(); 

    private: 

    }; 
} 

#endif // MINECRAFTLAUNCHER_HPP 
+0

'minecraftlauncher.hpp' 파일을 보여줄 수 있습니까? – leemes

+0

https://gist.github.com/2941696 –

답변

1

이 대부분 C++ (11) 헤더에 의해 노출 된 MOC 버그입니다. Qt를 소스에서 다시 컴파일하지 않았 으면 좋겠지 만, 마찬가지로 실패 할 것입니다.

Visual Studio 11은 not supported by Qt입니다. 그것은 tier2 지원조차도 아닙니다. 해결 방법은 버그가 수정 될 때까지 MSVC 2010을 사용하거나 패치를 제출하고 패치를 제출하는 것입니다.

+0

하지만 moc가 포함 경로에 stdlib include 폴더를 추가하지 않았거나 type_traits의 이름을 바꿀 때 moc가 잘 작동하며 추가 할 때 여전히 동일한 오류를 반환합니다. [this] (https://gist.github.com/2942068)와 같은 슬롯 –

+0

실제로 Java와 인터페이스하고 싶었고 64 비트 Java를 사용하고 싶었 기 때문에 소스에서 Qt를 컴파일했습니다. 그리고 비슷한 시도가있었습니다. 먼저 컴파일하는 것이지만 재 컴파일 된 소스를 redownload했을 때 어떤 이유에서든 작동했습니다./x64와 관련하여 문제를 복잡하게 만드는 표현은 있지만 VS 2010으로 시도합니다.> –