【问题标题】:Problem with linking C library to Qt project将 C 库链接到 Qt 项目的问题
【发布时间】:2019-08-14 17:18:04
【问题描述】:

我知道这是一个被讨论了 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

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

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

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

【问题讨论】:

  • -10737415150xC0000135,而后者又是 STATUS_DLL_NOT_FOUND

标签: c++ c qt


【解决方案1】:

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

  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 时保持未定义。

【讨论】:

  • @R Sahu,谢谢!您能否还添加有关将 dll 文件移动到调试文件夹的行,以便我将您的消息标记为答案?
  • @AlexanderLyapin,“将 dll 文件移动到调试文件夹”的问题是什么?
  • 在运行 TestDll 程序期间,mylib.dll 文件位于 debug/release 文件夹之外,因此获得了这些代码。我已经将它添加到调试/发布文件夹中(也尝试了使用 pro 文件链接它的选项)并且一切正常。
  • @AlexanderLyapin,我完全错过了。感谢您的澄清。当我为您提供第二个问题的解决方案时,您似乎陷入了一个问题。
  • @R Sahu,不过你的提示也很有用!
【解决方案2】:

所以,我根据@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 文件中的行是最重要的。现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多