在Qt中创建c ++库

时间:2014-03-26 09:11:46

标签: c++ linux qt shared-libraries

我是linux和Qt的新手,我试图在Qt中创建c ++库。 我有一个名为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文件。它有效,但它给了我不同的错误:

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

1 个答案:

答案 0 :(得分:0)

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

-limaglib

您可以将其视为-l替换&#34; lib&#34;。希望有所帮助!