C++ 编译 DLL 动态链接库
2021-07-22 本文已影响0人
ansey
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