在 Qt 中创建 c++ 库

Posted

技术标签:

【中文标题】在 Qt 中创建 c++ 库【英文标题】:Creating c++ library in Qt 【发布时间】:2014-03-26 09:11:45 【问题描述】:

我是 linux 和 Qt 的新手,我正在尝试。 我有一个名为 imaglib 的库,里面有几个类。到目前为止,我已经这样做了:

imaglib_global.h:

#ifndef IMAGLIB_GLOBAL_H
#define IMAGLIB_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(IMAGLIB_LIBRARY)
#  define IMAGLIBSHARED_EXPORT Q_DECL_EXPORT
#else
#  define IMAGLIBSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // IMAGLIB_GLOBAL_H

imaglib.h:

#ifndef IMAGLIB_H
#define IMAGLIB_H

#include "imaglib_global.h"
#include "imagClass.h"

class IMAGLIBSHARED_EXPORT IMaglib


public:
    IMaglib();
;

#endif // IMAGLIB_H

imagClass.h:

#include "imaglib_global.h"

class IMAGLIBSHARED_EXPORT imagClass


public:
    imagClass();

    void ImagOperation();

    // Other data goes here
;

// there are several imag classes

当我构建它时,它可以工作并在调试文件夹中创建 .o 文件和 .so、.so.1、.so.1.0 和 .so.1.0.0 但是当我尝试将它包含在应用程序中时不起作用。我尝试将这些文件复制到项目中名为 imagLib 的文件夹中,并将此代码添加到 application.pro 文件中:

TARGET = MyApp
TEMPLATE = app

DEPENDPATH += imagLib
INCLUDEPATH += imagLib
LIBS+=  -L imaglib/debug -llibiMaglib 
// It creates libiMaglib.so file so I thought I should use this one but it gives me error on compilation "cannot find -llibiiMaglib"

之后我尝试从终端构建库:

ar crv imaglibrary.so imaglib.o imagClass.o

但是当我尝试使用 imaglibrary.so 构建应用程序时,它给了我同样的错误,它给了我同样的错误。如何解决这个问题?

编辑

我还尝试在终端中创建 .lib 文件并将其包含在 application.pro 文件中,如上面显示的 .so 文件。它有效,但它给了我不同的错误:

“未定义对 imagClass::ImagOperation() 的引用”当我尝试创建对象并从代码中调用它时。

【问题讨论】:

确切的错误是什么? "找不到-llibiiMaglib" 你在库的pro文件中定义了IMAGLIB_LIBRARY吗? 是的,我做到了。谁能指点我一些关于在 Qt 中创建库的教程?我已经阅读了一些主题,但没有任何帮助。 【参考方案1】:

如果构建的库的名称是“libimaglib”,那么你应该像这样使用 -l 开关

-limaglib

您可以将其视为 -l 替换“lib”。希望对您有所帮助!

【讨论】:

以上是关于在 Qt 中创建 c++ 库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 或 Qt 中创建进程?

在 Qt C++ 应用程序中创建 python 解释器小部件的简单方法?

如何在 C++/QT 中创建 Windows 服务?

关于在 QT 中创建项目

在linux中创建使用opencv的C++动态库

在 C++ 中创建 Windows 共享库时如何实现接口隔离