美文网首页
C++ 编译 DLL 动态链接库

C++ 编译 DLL 动态链接库

作者: ansey | 来源:发表于2021-07-22 00:07 被阅读0次

    C++ 编译 DLL ,有托管、非托管 两种模式,这里只讨论非托管。

    环境:

    系统:windows 10
    编译器:Mingw-w64 ver8.1.0

    安装 Mingw-w64

    下载链接

    检查是否安装成功,命令行窗口输入

    gcc -v
    

    查看是否有版本信息打印。

    编译DLL

    • C 方式编译

    C 的方式编译 , 动态库函数名不会被修改
    新建头文件 cpp2DllStyleC.h

    
    #define BUILD_DLL
    
    // extern "C" , 按 C 的方式编译 
    // C 的方式编译 , 动态库函数名不会被修改
    
    #ifdef BUILD_DLL
    #define EXPORT extern "C" __declspec(dllexport)
    #else
    #define EXPORT extern "C" __declspec(dllimport)
    #endif
    
    //测试函数
    EXPORT double add_gcc_c(double a, double b);
    
    

    新建文件 cpp2DllStyleC.cpp

    
    #include "cpp2DllStyleC.h"
    
    //测试函数的实现
    double add_gcc_c(double a, double b)
    {
        return a + b;
    }
    
    //没有 mian 函数, gcc 编译会失败。
    int main()
    {
        return 0;
    }
    
    
    

    命令行窗口 编译

    gcc -shared -o cpp2DllStyleC.dll cpp2DllStyleC.cpp
    

    编译后,cpp2DllStyleC.dll 文件会在同一目录。

    • C++ 方式编译

    新建头文件 cpp2DllStyleCPP.h

    #define BUILD_DLL
    #ifdef BUILD_DLL
    #define EXPORT __declspec(dllexport)
    #else
    #define EXPORT __declspec(dllimport)
    #endif
    
    #pragma once
    namespace MathFuncs
    {
        class MyMathFuncs
        {
        public:
            // 测试函数
            static EXPORT double add_gcc_cpp(double a, double b);
        };
    }
    
    

    新建文件 cpp2DllStyleCPP.cpp

    #include "cpp2DllStyleCPP.h"
    
    namespace MathFuncs
    {
        //测试函数的实现
        double MyMathFuncs::add_gcc_cpp(double a, double b)
        {
            return a + b;
        }
    }
    
    int main()
    {
        return 0;
    }
    
    

    命令行窗口 编译

    gcc -shared -o cpp2DllStyleCPP.dll cpp2DllStyleCPP.cpp
    

    查看DLL 输出

    dumpbin 工具

    相关文章

      网友评论

          本文标题:C++ 编译 DLL 动态链接库

          本文链接:https://www.haomeiwen.com/subject/hoddmltx.html