编译一个简单的 Qt“Hello World!” Visual Studio 2010 Express 中的应用程序?
我正在尝试构建一个基本的 Qt“Hello, world!” Visual Studio 中的应用程序。
我的 moc
步骤可以正常工作(我认为),但现在我不知道如何修复此链接器错误:
1>moc_mainwindow.obj : error LNK2001: unresolved external symbol "public:
static struct QMetaObject const QMainWindow::staticMetaObject"
(?staticMetaObject@QMainWindow@@2UQMetaObject@@B)
我已经进行了大量搜索,但我不知所措。
这是我的包含目录:
i:\Qt\4.6.3\include\QtCore;
i:\Qt\4.6.3\include\QtGui;
i :\Qt\4.6.3\include;
i:\Qt\4.6.3\include\ActiveQt;
释放;
.;
i:\Qt\4.6.3\mkspecs\win32-msvc2008
以下是我要链接的库:
i:\Qt\4.6.3\lib\QtGui4.lib;
i:\Qt\4.6.3\lib\QtCore4.lib;
gdi32.lib;
comdlg32.lib;
oleaut32.lib;
imm32.lib;
winmm.lib;
winspool.lib;
ws2_32.lib;< /code>
ole32.lib;
user32.lib;
advapi32.lib;
libpng.lib;
msimg32.lib;
shell32.lib;
kernel32.lib;
uuid.lib;
有人有什么想法吗?
I'm trying to build a basic Qt "Hello, world!" application inside Visual Studio.
I got the moc
step to work (I think), but now I am at a loss as to how to fix this linker error:
1>moc_mainwindow.obj : error LNK2001: unresolved external symbol "public:
static struct QMetaObject const QMainWindow::staticMetaObject"
(?staticMetaObject@QMainWindow@@2UQMetaObject@@B)
I've done a lot of searching but I am at a loss.
Here are my include directories:
i:\Qt\4.6.3\include\QtCore;
i:\Qt\4.6.3\include\QtGui;
i:\Qt\4.6.3\include;
i:\Qt\4.6.3\include\ActiveQt;
reease;
.;
i:\Qt\4.6.3\mkspecs\win32-msvc2008
Here are the libraries I am linking against:
i:\Qt\4.6.3\lib\QtGui4.lib;
i:\Qt\4.6.3\lib\QtCore4.lib;
gdi32.lib;
comdlg32.lib;
oleaut32.lib;
imm32.lib;
winmm.lib;
winspool.lib;
ws2_32.lib;
ole32.lib;
user32.lib;
advapi32.lib;
libpng.lib;
msimg32.lib;
shell32.lib;
kernel32.lib;
uuid.lib;
Does anyone have any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
qmake 将从 .pro 文件中的头文件生成 moc voodoo。由于您没有使用 qmake,从它的声音来看,而是一个本机 Visual Studio 项目,这可能是问题的原因。
如果你使用 qmake 生成你的 Visual Studio 项目,你的所有问题都会消失,生活将变得甜蜜。大概!
我用的是open 2010.05;显然你想用正确的路径替换你的版本。
设置环境
从开始菜单启动 2010 命令环境
-set include=%include%;C:\Qt\2010.05\qt\include
-set lib=%lib%;C:\Qt\2010.05\qt\lib
-设置路径=%path%;C:\Qt\2010.05\qt\bin
-set QMAKESPEC=win32-msvc2010
编写代码、创建文件等
生成初始 pro 和 makefile 并启动 VS
-qmake -tp vc
-qmake
你现在应该有一个 makefile - 通过运行检查它是否有效:
-nmake
现在启动 Visual Studio
-VCExpress.exe /useenv
-XXX.vcxproj 现在可以打开
如果这不起作用,您可能需要针对 Visual Studio 构建 qt。这非常简单 - 转到 qt 目录(从 Visual Studio Express 命令窗口中)并输入:
qmake will generate the moc voodoo from the header file in .pro file. As you aren't using qmake, by the sound of it, but a native visual studio project, this is probably the cause of the problem.
If you use qmake to generate your visual studio project all your problems will go away and life will be sweet. Probably!
I am using the open 2010.05; obviously you want to substitute the correct path for your version.
set up the environment
start 2010 command environment from the start menu
-set include=%include%;C:\Qt\2010.05\qt\include
-set lib=%lib%;C:\Qt\2010.05\qt\lib
-set path=%path%;C:\Qt\2010.05\qt\bin
-set QMAKESPEC=win32-msvc2010
write code, create files etc
generate the initial pro and makefile and fire up VS
-qmake -tp vc
-qmake
you should now have a makefile - check that it works by running:
-nmake
now launch visual studio
-VCExpress.exe /useenv
-XXX.vcxproj can now be opened
If this doesn't work you may need to build qt at against visual studio. This is very straightforward - go to the qt directory (from within the visual studio express command window) and type:
您无法在 VC++ Express 版本上安装 Qt VS 插件。假设您已经编译了 moc,您还需要确保在链接时包含适当的库(*.lib 文件)。这位于“项目属性”>“项目属性”下链接器>输入>附加依赖项。
您至少需要 qtcore4.lib。
另请确保 Qt 库路径位于您的库搜索路径中。在我的计算机上,它是 c:\qt\4.6.2\lib。
You cannot install the Qt VS plugin on the Express edition of VC++. Assuming you got the moc to compile, you also need to make sure you're including the appropriate libraries (*.lib files) at link time. This goes under Project properties > Linker > Input > Additional Dependencies.
You will need qtcore4.lib at a minimum.
Also make sure the Qt library path is in your library search path. On my computer it's c:\qt\4.6.2\lib.
我能够使用 http://rajorshi.net/blog/2009/01/using-qt-with-msvc-express-2008/ 和 http://portfolio.delinkx.com/files/Qt.pdf 作为指南。以防万一有人仍然遇到问题。
I was able to get QT to work with Visual C++ Express 2010 using http://rajorshi.net/blog/2009/01/using-qt-with-msvc-express-2008/ and http://portfolio.delinkx.com/files/Qt.pdf as guides. Just in case anyone still is having problems.
您是否先使用 qmake 创建了 Visual Studio 项目?问题似乎出在 moc 编译上。你是否安装了qt插件以及环境变量中的qt路径?您可以添加您的 hello world 代码以便我看一下吗?
Have you create the visual studio project using qmake first? The problem seems to be the moc compilation. Do you have qt plug-in installed and the qt path in enviromental variables? Can you add you hello world code so I can have a look at it?
您需要添加命令来生成 QT 元类,然后还将生成的文件作为 C++ 代码包含在您的项目中。
生成 QT 元类:
首先,将 QT bin 路径添加到可执行目录中。 (这位于“配置属性”>“VC++ 目录”中)
将包含 Q_OBJECT 宏的头文件添加到项目中。
多选您的头文件,然后右键单击头文件,单击“属性”。
moc.exe "%(FullPath)" > “$(ProjectDir)MetaObjects\moc_%(文件名).cpp”
QT:生成 $(ProjectDir)MetaObjects\moc_%(Filename).cpp
(可选)$(ProjectDir)MetaObjects\moc_%(Filename).cpp
You need to add commands to generate QT metaclasses, then also include the generated files in your project as c++ code.
Generating the QT metaclasses:
First, add your QT bin path into the Executable Directory. (This is in Configuration Properties > VC++ Directories)
Add your Header files that contain Q_OBJECT macros to the project.
Multi-select your header files, then right click on a header file, click Properties.
moc.exe "%(FullPath)" > "$(ProjectDir)MetaObjects\moc_%(Filename).cpp"
QT: Generate $(ProjectDir)MetaObjects\moc_%(Filename).cpp
(optional)$(ProjectDir)MetaObjects\moc_%(Filename).cpp