Visual Studio 2010 Qt链接问题

时间:2011-08-29 14:50:18

标签: c++ visual-studio-2010 qt linker

我花了整个周末试图解决这个问题,我正在迈出最后一步。我的目标:让visual studio 2010和Qt 4.7.3一起工作。

我从源代码安装了Qt,指定使用以下配置进行构建:

configure.exe -debug-and-release -opensource -platform win32-msvc2010 -no-webkit -no-phonon -no-phonon-backend -no-script -no-scripttools -no-qt3support -no-multimedia - 无LTCG

配置完成后,我运行了nmake,没问题。

在我的visual studio 2010解决方案中,我有两个项目。 Image 它抱怨它无法链接Qt库。在公共属性

AssetIO最初是使用Qt IDE构建的,我使用Visual Studio中的Qt插件导入项目。编译项目AssetIO工作得非常好。但是,编译Short项目会导致以下链接器错误: LinkerErrors 右键单击Short项目,选择属性。我添加了AssetIO作为参考。单击配置属性VC ++目录,我添加了以下Include目录:

Include Directories 以下是我为项目提供的库文件: Library Directories 而不是发布更多的屏幕截图,我的AssetIO项目的包含目录是: C:\ qt_source \ 4.7.3 \包括

我的AssetIO项目的库目录是: C:\ qt_source \ 4.7.3 \ BIN

以下是我正在尝试的项目的简单源代码(我的简单测试项目)

main.cpp
int main(int argc, char* argv[])
{
    AssetIO::LevelLoader a;
    a.dostuff();

    return 0;
}

LevelLoader.h

#ifndef LEVELLOADER_HPP
#define LEVELLOADER_HPP

namespace AssetIO
{
    class LevelLoader {
    public:
        explicit LevelLoader();
        ~LevelLoader();

        void dostuff();
    };
}

#endif // LEVELLOADER_HPP

LevelLoader.cpp

#include "LevelLoader.hpp"
#include <QDomDocument>
#include <QFile>
#include <QDebug>
#include <QString>

using namespace AssetIO;

enum ComponentType { Drawable = 0, Position };

// This will definitely be changed, to return a full-blown component. Passing the tagname directly to the
// component factory.
ComponentType ConvertToComponentType(QString tagName)
{
if(tagName.toLower() == "Drawable") {
    return Drawable;
}
else if(tagName.toLower() == "Position") {
    return Position;
}
else {
    // LOG
    exit(EXIT_FAILURE);
}
}

LevelLoader::LevelLoader()
{
}

LevelLoader::~LevelLoader()
{
}

void LevelLoader::dostuff()
{
QDomDocument doc("la");
QFile file("../../../Resources/input.sto");

if(!file.open(QIODevice::ReadOnly)) {
    // TODO: log this, something
    exit(EXIT_FAILURE);
}

if( !doc.setContent(&file)) {
    // TODO: log
    file.close();
}
// we close the file now the doc has control (i think)
file.close();

// Read the root element
QDomElement root = doc.documentElement();
if(root.tagName() != "Root") {
    // TODO: log
    exit(EXIT_FAILURE);
}

// Read the Header Info
QDomNode headerNode = root.firstChild();

QDomElement e = headerNode.toElement();
if(e.tagName().toLower() != "HeaderInfo") {
    // LOG
}

QDomNodeList componentNode = headerNode.childNodes();
int s = componentNode.count();

QString componentTag(componentNode.at(0).toElement().tagName());
QDomNamedNodeMap a = componentNode.at(0).attributes();
}

我无法弄清楚我做错了什么。有没有人有任何想法?我到处寻找解决方案。

3 个答案:

答案 0 :(得分:5)

你有没有忘记为VS链接指定Qt lib文件?你可能需要QtCored4.lib,QtGuid4.lib(d代表“debug”,在发布配置中删除它),也许还需要其他一些。如果给您带来麻烦的项目是.exe应用程序 - 转到它的Properties-&gt; Linker-&gt;命令行并添加{Qored4.lib QtGuid4.lib}而不带括号。

P上。 S.我的建议:首先,在Qt Creator中创建一个项目并进行测试。然后运行qmake -tp vc -r - 你将获得VS或任何其他主要平台的完美工作解决方案。此外,Creator有一个很好的编辑器,你可能会喜欢它。

答案 1 :(得分:4)

我发现你的库目录缺少C:\qt_source\4.7.3\lib,包括它。

然后包括

  

QtCored4.lib QtGuid4.lib和任何其他Qt库

紫罗兰长颈鹿建议要求

。您还需要使用“发布版本”

执行此操作
  

QtCore4.lib QtGui4.lib和任何其他Qt库

CV

答案 2 :(得分:1)

如果您已创建QtQDomDocument的实例。可能需要添加“QtXml4.lib”。请在Visual Studio中添加此lib,即Project->properties->Linker->Input====> Additional Dependencies