我用Qt Creator(编译器MSVC2010 32位)创建了一个共享库,用xml文件进行一些操作(当我必须选择模块时,我检查了QtCore,QtXml和QtXmlPatterns)。
以下是lib的代码:
标题:
#ifndef CONVERTERSHARED_H
#define CONVERTERSHARED_H
#include "convertershared_global.h" //created automatically by Qt
#include <QString>
class CONVERTERSHAREDSHARED_EXPORT ConverterShared
{
public:
ConverterShared();
bool convert(QString inFileName);
};
#endif // CONVERTERSHARED_H
的.cpp
#include "convertershared.h"
#include <QFile>
#include <QFileInfo>
#include <QDir>
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
#include <QDomDocument>
#include <QMap>
#include <iostream>
#include <fstream>
using namespace std;
ConverterShared::ConverterShared()
{
}
bool ConverterShared::convert(QString inFileName)
{
//process...
}
因此它创建了一个.lib和一个.dll。
当我在Qt项目中使用这个lib(包括包含的路径,.pro中的库,将.dll放在exe目录中)时,一切都很好,我可以创建一个ConverterShared实例并使用convert函数。 / p>
我的问题是在没有使用Qt的Visual Studio(C ++ 2010)项目中使用它。所以在项目的属性中,我补充说:
在C / C ++中 - &gt;一般 - &gt;其他包含目录 - &gt; path / to / convertershared.h(包含convertershared_global.h)
- &gt;一般 - &gt;附加依赖性 - &gt; ConverterShared.lib(使用路径/ ConverterShared.lib测试且没有路径)
- &gt;常规 - &gt;其他库目录 - &gt;路径/到/ lib中
然后,在.cpp文件中,它找到convertershared.h,所以我包含它但是当我编译时,我得到错误:
Cannot open include file QtCore/qglobal.h: No such file or directory
(and then IntelliSense cannot open source file "QtCore/qglobal.h", "QString")
那么如何纠正它并在一个不使用Qt的Visual项目中使用我的Qt lib(编译最终Visual项目的PC并不是必须安装Qt)?
答案 0 :(得分:3)
我认为您需要定义Qt包含文件的路径,例如qglobal.h等,它们来自您的convertershared_global.h
文件。例如,在VS项目的属性页面C/C++ -> General -> Additional Include Directories
中添加$(QTDIR)\include\QtCore
和其他路径(如有必要),以使编译器找到所有包含。
答案 1 :(得分:1)
如果您将应用程序与使用Qt的共享库链接,您还应该将应用程序与Qt链接并定义包含路径。即使您与Qt链接,您的应用程序也需要QCoreApplication
的实例,并且还需要一个事件循环。
在您的情况下,由于您没有Qt应用程序并且想要链接到Qt共享库,您可以在共享库的新线程中创建QCoreApplication
的实例,然后运行事件循环正如here所述。
如果您不想将您的应用程序与Qt链接,您可以在运行时加载您的共享库,并使用QLibrary
{{1}} {{1}}动态调用它的函数。