• clion qt导出dll给别的项目用


    clion 导出dll给别的项目用,并且引入matplotcpp
    dll生成一个mydll的dll文件
    1.先做一个简单dll的测试下

    cmake_minimum_required(VERSION 3.26)
    project(untitled)
    set(CMAKE_CXX_STANDARD 11)
    add_library(untitled SHARED main.cpp)
    
    • 1
    • 2
    • 3
    • 4

    main.h

    void hello();
    
    • 1

    main.cpp

    void hello()
    {
        std::cout << "Hello, mylib!" << std::endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    在这里插入图片描述
    ctrl+f9生成构建到目录下,生成libuntitled.dll
    在这里插入图片描述
    2.生成mydll用controller.cpp测试

    cmake_minimum_required(VERSION 3.26)
    project(mydll)
    set(CMAKE_CXX_STANDARD 11)
    add_library(mydll SHARED controller.cpp)
    
    • 1
    • 2
    • 3
    • 4

    controller.cpp

    #include "controller.h"
    
    Controller::Controller(float _a_dist) : a_dist(_a_dist) {
         
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    controller.h

    #include  
    
    class Controller {
    private: 
        float a_dist; 
    
    public:
        Controller(float a_dist_ = 1.0);
        ~Controller() = default;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    生成libmydll.dll
    3.clion调用

    cmake_minimum_required(VERSION 3.26)
    project(testpython)
    
    set(CMAKE_CXX_STANDARD 11)
    
    ##python h, python数学计算
    include_directories(D:\\app\\dev\\Python37\\include
            D:\\app\\dev\\Python37\\Lib\\site-packages\\numpy\\core\\include)
    
    ##python lib 测试的dll
    link_libraries(D:/app/dev/Python37/libs/python37.lib
            C:/Users/andyz/CLionProjects/untitled/cmake-build-debug/libmydll.dll
            C:/Users/andyz/CLionProjects/testdll/lib/libuntitled.dll)
    
    add_executable(testpython main.cpp
            matplotlibcpp.h)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    目录结构
    在这里插入图片描述

    #include 
    #include "Python.h"
    #include "controller.h"
    #include "matplotlibcpp.h"
    
    namespace plt = matplotlibcpp;
    
    void hello();
    
    int main() {
        hello(); 
    
        float a_dist = 1; 
    
        Controller controller(a_dist);
    
        Py_Initialize();
        PyRun_SimpleString("print('hi python')");
        Py_Finalize();
        std::cout << "Hello, World!" << std::endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    输出结果,一个是简单dll,一个是PyRun_SimpleString
    在这里插入图片描述

    4.qt生成的dll在vs 2022调用
    参考这个文章https://blog.csdn.net/u010260855/article/details/22594191

    #if defined(LOS_LIBRARY)
    #define ADD_EXPORTS _declspec(dllexport)
    #else
    #define  ADD_EXPORTS _declspec(dllimport)
    #endif
    class ADD_EXPORTS add
    {
    public:
    	add(void);
    	~add(void);
    	static int myadd(int a, int b)
    	{
    		return a+b;
    	}
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    #ifndef ADD_EXPORTS
    #define ADD_EXPORTS//这个宏的名称与头文件中要一致
    #endif
     
     
    #include "add.h"
    add::add(void)
    {
    }
    add::~add(void)
    {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    代码目录需要放置los.dll
    在这里插入图片描述

  • 相关阅读:
    C语言-函数
    docker配置nginx
    机器学习——逻辑斯蒂回归数学原理及信用卡诈骗项目实例
    前端工程化精讲第六课 团队工具:如何利用云开发提升团队开发效率?
    电子学会2021年6月青少年软件编程(图形化)等级考试试卷(二级)答案解析
    [Docker]八.Docker 容器跨主机通讯
    【番外篇】如何制作慕斯蛋糕
    如何提升软件测试效率?本文为你揭示秘密
    【信号去噪】基于遗传算法优化VMD实现信号去噪附matlab代码
    软件测试 | Jenkins 多任务关联
  • 原文地址:https://blog.csdn.net/jian436/article/details/134431066