我是共享库的新手,所以我对如何创建/使用共享库有疑问,我正在使用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
#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
extern "C" SHAREDLIBSHARED_EXPORT int add(int a, int b)
{
return a + b;
}
只添加了一个简单的函数来添加2个数字.
在构建之后,我得到了sharedlib.dll和sharedlib.lib以及其他一些文件,(在某些教程中没有.a文件,我认为是因为我使用的是微软vc编译器而不是.lib文件).
现在创建第二个我想要使用该库的程序:
新项目 – > Qt控制台应用程序 – >名称(loadlib) – >完成,然后我将sharedlib.lib,sharedlib.h,sharedlib.dll复制到loadlib目录中. (我需要它们吗?我应该把它们放在哪里?)
根据教程,右键单击项目 – > gt; add library-> external library->选择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/
>如果我将.h和.dll / .lib文件放在子文件夹中,如loadlib / include和loadlib / libs,它将更改为INCLUDEPATH = $$PWD / include DEPENDPATH = $$PWD / include和LIBS = -L $$PWD / libs -lsharedlib,对吗?
>我需要将所有3个文件复制到我的loadlib目录吗?
> main.cpp:
#include
#include
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,并摆脱了类,我可以直接调用函数而不将其包装到类中吗?