我知道这是100次讨论的话题,但是经过多次尝试,我还是找不到解决方案,因为不了解情况-没有错误。 我正在尝试将DLL“ C”库连接到我的项目,并在App输出中收到一些疯狂的代码“ ...代码为-1073741515退出”,以及按此键关闭此窗口的空控制台...
所以,这是我的: mylib.c:
#include "mylib.h"
int mysum(int a, int b){
return a + b;
}
mylib.h:
#ifdef __cplusplus
extern "C" {
#endif
#define EXPORT __declspec(dllexport)
EXPORT int mysum(int, int);
#ifdef __cplusplus
}
#endif
testlib.pro:
QT -= gui
CONFIG += c++11 console
CONFIG -= app_bundle
SOURCES += \
main.cpp
LIBS += -L$$PWD/../../../../TestDLL/ -lmylib
INCLUDEPATH += $$PWD/../../../../TestDLL
DEPENDPATH += $$PWD/../../../../TestDLL
HEADERS += \
../../../../TestDLL/mylib.h
main.cpp:
#include <QCoreApplication>
#include "mylib.h"
#include <QtDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug()<<mysum(1,2);
return a.exec();
}
我认为,我在pro文件中缺少一些与链接有关的东西,但无法获取。 TestDLL是具有以下内容的文件夹:
mylib.dll mylib.h mylib.c libmylib.a
构建我使用过的dll:
gcc -c mylib.c
gcc -shared -o mylib.dll -Wl,--out-implib,libmylib.a mylib.o
希望获得一些提示...谢谢
答案 0 :(得分:2)
您必须对编译器选项进行以下操作:
构建库时,您已经拥有
#define EXPORT __declspec(dllexport)
使用库时,您拥有
#define EXPORT __declspec(dllimport)
一种方法是使用:
#if defined(BUILD_DLL)
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
然后在构建DLL时使用-DBUILD_DLL
,并在使用DLL时将其保留为未定义状态。
答案 1 :(得分:1)
因此,根据@R Sahu提示,我已进行了更改:
在mylib.h中:
#ifdef BUILDING_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
并用于编译dll:
gcc -c -DBUILDING_DLL mylib.c
gcc -shared -o mylib.dll mylib.o -Wl,--out-implib,libmylib.a
.pro文件中的加号:
LIBS += "$$PWD/../../../../TestDLL/mylib.dll"
我相信,.pro文件中的那一行是最重要的。现在一切正常。