我是共享库的新手,所以我对如何创建/使用共享库有疑问,我正在使用Qt Creator和qt 5.4.2与Microsoft Visual C ++ 11.0 Compliler。
在我的项目中,我需要创建一个dll,它从外部库调用函数(有.h,.lib,.dll可供使用)。为了理解如何从库中导出/导入函数,我尝试用一个函数创建一个简单的库,并在另一个程序中首先使用它。 阅读完不同的教程后,我设法创建了库。在Qt Creator,New Project-> Library(C ++ Library) - > Type(共享库)名称:sharedlib-> Modules(QtCore) - > Finish。
sharedlib.h:
#ifndef SHAREDLIB_H
#define SHAREDLIB_H
#include <QtCore/qglobal.h>
#if defined(SHAREDLIB_LIBRARY)
# define SHAREDLIBSHARED_EXPORT Q_DECL_EXPORT
#else
# define SHAREDLIBSHARED_EXPORT Q_DECL_IMPORT
#endif
extern "C" SHAREDLIBSHARED_EXPORT int add(int a, int b);
#endif // SHAREDLIB_H
sharedlib.cpp:
#include "sharedlib.h"
#include <stdio.h>
extern "C" SHAREDLIBSHARED_EXPORT int add(int a, int b)
{
return a + b;
}
只添加了一个简单的函数来添加2个数字。
构建之后,我得到sharedlib.dll
和sharedlib.lib
以及其他一些文件(没有像某些教程中的.a文件,我认为是因为我使用的是提供.lib文件的microsoft vc编译器代替)。
现在创建第二个我想要使用该库的程序:
新项目 - &gt; Qt控制台应用程序 - &gt;名称(loadlib) - &gt;完成,然后我将sharedlib.lib, sharedlib.h, sharedlib.dll
复制到loadlib目录中。 (我需要它们吗?我应该把它们放在哪里?)
根据教程,右键单击项目 - > gt; add library-&gt; external library-&gt;选择loadlib目录中的.lib文件,取消选中Platform下的Linux和Mac并选择Dynamic Linkage。
这是我的loadlib.pro:
QT += core
QT -= gui
TARGET = loadlib
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/ -lsharedlib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/ -lsharedlib
INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/
INCLUDEPATH += $$PWD/include DEPENDPATH += $$PWD/include
和LIBS += -L$$PWD/libs -lsharedlib
,对吧?main.cpp中:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// simple Debug output to add 7 and 3
return a.exec();
}
我如何在这里实际使用添加功能?
编辑:我改变了一些东西,摆脱了sharedlib_global.h并将内容粘贴到sharedlib.h中,摆脱了类,我可以直接调用函数而不将其包装成一个班级?
答案 0 :(得分:5)
到目前为止,您所做的一切都是正确的。现在只需在main.cpp或任何文件中包含库头文件sharedlib.h,然后在那里使用add()函数。
#include <QCoreApplication>
#include <QDebug>
#include "sharedlib.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// simple Debug output to add 7 and 3
SharedLib lib;
int a = 5, b = 6;
int sum = lib.add (a, b);
return a.exec();
}
在部署时,您需要将sharedlib.dll与可执行文件一起打包在同一目录中。
答案 1 :(得分:2)
试试这个(main.cpp):
#include "sharedlib.h"
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// simple Debug output to add 7 and 3
SharedLib sLib;
qDebug() << sLib.add(7, 3); // should print 10
return 0; // just exit
// return a.exec(); // you need to kill / force stop your app if you do ths.
}
如果您可以编译以上内容,那么您的库正在按预期工作。