2012-06-16 3 views
2

Я пытался построить проект QT в Qt Creator, но получает ошибки ссылки:QT moc.exe создание пустых файлов, ошибка с участием 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 файлов, с сообщением об ошибке

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

Я попытался запустить moc в командной строке с флагами она запускалась с в Qt Creator:.

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

Из того, что я знаю о type_traits, я считаю, что это связано с получением информации о типе компиляции об объекте. Но я понятия не имею, почему это заставляет мета-объект компилятор ошибиться. Почему он это делает? Что делает moc с type_traits, почему это и что не удается?

Буду очень признателен за любое понимание, которое может предоставить любой человек, поскольку это было для меня очень озадачивающим.

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

Это, скорее всего, MOC ошибка разоблачена C++ 11 заголовков. Бьюсь об заклад, вы не перекомпилировали Qt из источников, так как это тоже сработало бы.

Visual Studio 11 - not supported by Qt. Это даже не поддержка tier2. Обходной путь заключается в использовании MSVC 2010 до исправления ошибки или для исправления moc и отправки исправления :)

+0

Но moc отлично работает, когда я не добавляю папку include stdlib в путь include или когда я переименовываю type_traits, и она по-прежнему возвращает ту же ошибку, когда я добавляю в слот, как [this] (https://gist.github.com/2942068) –

+0

На самом деле, я скомпилировал Qt из источников, поскольку я хотел взаимодействовать с Java и хотел использовать 64-битную Java, и что-то подобное произошло, когда я попытался сначала скомпилировать его, но по какой-то причине, когда я перезагрузил источники, перекомпилированные, это сработало:/Я попробую с VS 2010, хотя у меня есть только экспресс-издание того, что усложняет вопросы с точки зрения x64>.> –

Смежные вопросы