在 Linux 上构建 Qt 共享库
Posted
技术标签:
【中文标题】在 Linux 上构建 Qt 共享库【英文标题】:Building Qt Shared library on Linux 【发布时间】:2014-11-28 20:54:03 【问题描述】:我已按照以下链接中的说明进行操作(以及此处的一些主题) http://qt-project.org/doc/qt-4.8/sharedlibrary.html
我正在成功构建一个项目,但我只看到通常的对象和编译后的最终二进制文件。没有任何东西看起来像图书馆。
想法?
MyWidget_global.h
#ifndef MY_WIDGET_GLOBAL_H
#define MY_WIDGET_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(MY_WIDGET_LIBRARY)
# define MY_WIDGET_EXPORT Q_DECL_EXPORT
#else
# define MY_WIDGET_IMPORT Q_DECL_IMPORT
#endif
#endif
项目文件
DEFINES += MY_WIDGET_LIBRARY
# Input
HEADERS += MyWidget_global.h \
MyWidget.h
# Input
SOURCES += main.cpp \
MyWidget.cpp
最后是实际类的标题
#ifndef MY_WIDGET_H
#define MY_WIDGET_H
#include "MyWidget_global.h"
class MY_WIDGET_EXPORT MyWidget
public:
MyWidget();
// Snip
;
#endif
【问题讨论】:
您的.pro
文件中有TEMPLATE = lib
吗?
我绝对不会。我周末下班回家,但周一会先尝试。谢谢。 :)
就是这样。谢谢。随意提供它作为答案,我会投票赞成。
【参考方案1】:
Qt 带有一系列预定义的项目模板。直接来自文档here:
TEMPLATE 变量用于定义将要构建的项目的类型。 如果这个没有在项目文件中声明,qmake假定应该构建一个应用程序,并会生成一个合适的Makefile(或等效文件) 的目的。
因此,在您的情况下,QMake 假定要构建应用程序。添加正确的模板可以解决问题,即
TEMPLATE = lib
是解决方案。事实上,lib
是为库创建输出生成文件的正确模板。
请参阅here,了解如何正确创建库并将其添加到项目中。
【讨论】:
谢谢。我已经查看了该文档,但错过了。另外值得注意的是,当我想在 Windows 端链接一个静态库时,它必须是 TEMPLATE = staticlib(它同时构建 .dll 和 .a 库)。以上是关于在 Linux 上构建 Qt 共享库的主要内容,如果未能解决你的问题,请参考以下文章