Я пытался построить проект 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
Можете ли вы показать нам свой файл 'minecraftlauncher.hpp'? – leemes
https://gist.github.com/2941696 –