将C库链接到Qt项目时出现问题

Problem with linking C library to Qt project

本文关键字:问题 项目 Qt 链接      更新时间:2023-10-16

我知道这是一个 100 次讨论的话题,但经过多次尝试,我只是找不到解决方案,因为不了解情况 - 没有错误。我正在尝试将dll"C"库连接到我的项目,并在应用程序输出中收到一些疯狂的代码"...退出代码 -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

主.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();
}

我想,我在专业文件中缺少一些链接的东西,但无法得到什么。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

将不胜感激一些提示...谢谢

您必须操作编译器选项,以便:

  1. 构建库时,您有

    #define EXPORT __declspec(dllexport)
    
  2. 使用库时,您有

    #define EXPORT __declspec(dllimport)
    

一种方法是使用:

#if defined(BUILD_DLL)
   #define EXPORT __declspec(dllexport)
#else
   #define EXPORT __declspec(dllimport)
#endif

然后在生成 DLL 时使用 -DBUILD_DLL,并在使用 DLL 时将其保留为未定义。

那么,我按照 Sahu 提示更改@R:

在 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文件中的行是最重要的。现在一切正常。