编译时不能包含 Sparkle 框架
Posted
技术标签:
【中文标题】编译时不能包含 Sparkle 框架【英文标题】:Cannot include Sparkle framework when compiling 【发布时间】:2012-07-30 22:47:43 【问题描述】:我目前正在构建一个基于 Qt C++ 框架的项目,该框架利用 Sparkle 框架进行更新。我遇到的问题是我的整个应用程序构建得很好,除非我包含 Sparkle 框架。
Sparkle.framework 目录位于 /Library/Frameworks 目录中。
在我的 .pro 文件中,我有:
QMAKE_LFLAGS += -F /Library/Frameworks
LIBS += -framework Sparkle
在我的 SparkleUpdater 类中,我有以下标题:
#include <Sparkle/Sparkle.h>
#include "SparkleUpdater.h"
当我将鼠标悬停在 Qt Creator 中的包含上时,我会收到关于 sparkle 框架路径的通知,其中包含: /Library/Frameworks/Sparkle.framework/Headers/Sparkle.h 这是正确的位置,实际上是Sparkle.framework 在我机器上的位置。
然而,当我构建我的项目时,我会从编译器中得到以下信息:
SparkleUpdater.mm:2:29: error: Sparkle/Sparkle.h: No such file or directory
SparkleUpdater.mm:10: error: ISO C++ forbids declaration of 'SUUpdater' with no type
SparkleUpdater.mm:10: error: expected ';' before '*' token
SparkleUpdater.mm: In constructor 'SparkleUpdaterPrivate::SparkleUpdaterPrivate()':
SparkleUpdater.mm:9: error: class 'SparkleUpdaterPrivate' does not have any field named 'updater'
SparkleUpdater.mm: In constructor 'SparkleUpdater::SparkleUpdater(const QString&, bool)':
SparkleUpdater.mm:17: error: 'class SparkleUpdaterPrivate' has no member named 'updater'
SparkleUpdater.mm:17: error: 'SUUpdater' was not declared in this scope
SparkleUpdater.mm:18: error: 'class SparkleUpdaterPrivate' has no member named 'updater'
SparkleUpdater.mm:22: error: 'class SparkleUpdaterPrivate' has no member named 'updater'
SparkleUpdater.mm:24: error: 'class SparkleUpdaterPrivate' has no member named 'updater'
SparkleUpdater.mm: In destructor 'virtual SparkleUpdater::~SparkleUpdater()':
SparkleUpdater.mm:30: error: 'class SparkleUpdaterPrivate' has no member named 'updater'
SparkleUpdater.mm: In member function 'virtual void SparkleUpdater::checkForUpdates(bool)':
SparkleUpdater.mm:40: error: 'class SparkleUpdaterPrivate' has no member named 'updater'
SparkleUpdater.mm:41: error: 'class SparkleUpdaterPrivate' has no member named 'updater'
SparkleUpdater.mm:45: error: 'class SparkleUpdaterPrivate' has no member named 'updater'
make[1]: *** [SparkleUpdater.o] Error 1
我已尝试删除和替换我机器上的 Sparkle 框架。 我尝试过明确地包含 Headers 文件夹:
INCLUDEPATH += -F /Library/Frameworks
和
INCLUDEPATH += -F /Library/Frameworks/Sparkle.framework/Versions/A
但无济于事。我仍然从编译器得到相同的消息。
谁能帮帮我?
【问题讨论】:
使用-I
标志向编译器添加包含文件搜索路径。此外,在链接时,您可能需要添加 -L
标志来告诉链接器库的路径。
【参考方案1】:
我最近遇到了 Qt 中的 Sparkle 集成问题。在关注了一些没有帮助的帖子之后,我能够弄清楚我需要做什么才能让事情正常进行。
因此,在此之后,我决定编写一个快速演练,让框架的客户端启动并运行。 你可以找到我的帖子:http://www.discoversdk.com/knowledge-base/using-sparkle-in-qt
【讨论】:
如何在 Qt 中包含 sparkle 而不将其移动到 lib 文件夹?对于其他开发人员正在从事的项目,这不是一个好的解决方案。【参考方案2】:应该这样做:
cd /Library/Frameworks/Sparkle.framework/Headers
ln -s ../Headers Sparkle
【讨论】:
以上是关于编译时不能包含 Sparkle 框架的主要内容,如果未能解决你的问题,请参考以下文章
编译nana库时不能包含<X11/Xft/Xft.h>,没有这样的文件或目录