打赏

MinGW编译dll并引用

记得某位神仙曾经说过:一个项目不使用dll简直是一场灾难。(滑稽)


这篇文章以A+B/A-B为范例,来介绍如何在MinGW下编译dll并引用。

  • 首先你要安装MinGW,并配置好环境变量(不配置环境变量也行,就是麻烦)。

  • 我们新建一段.cpp代码,命名为dll.cpp( 什么破名字 ),写入:

#include <iostream>
using namespace std;

#define EXPORT __declspec(dllexport)

extern "C"{
    int EXPORT a_b(int a,int b); //计算A+B
    int EXPORT a__b(int a,int b);  //计算A-B
}

int a_b(int a,int b){
	return a+b;
}

int a__b(int a,int b){
	return a-b;
}


- 接下来建立一个名为test.cpp的代码文件( ~~又是这种破名字~~ ),里面写入:
#include <iostream>
#include <cstdio>
using namespace std;

#define EXPORT __declspec(dllimport)

extern "C"
{
    int EXPORT a_b(int a,int b);
    int EXPORT a__b(int a,int b);
}

int main(){
    cout << a_b(10,100*10) << endl;
    cout << a__b(10*99, 100) << endl;
    cin.get();
    return 0;
}


现在来编译,打开cmd,输入命令 `g++ dll.cpp -shared -o dll.dll -Wl,--out-implib,dll.lib` 来把刚刚的 `dll.cpp` 编译成.dll。 接着输入 `g++ -ldll test.cpp -o test.exe` 来把 test.cpp 编译为 test.exe ,并且引用刚刚的 dll.dll。 怎么样?不出意外的话,你的目录下就会多出个test.exe,我们双击运行他。 输出的结果: 1010 890

  • 题外话:同时引用两个dll


    我们在刚才的目录下新建一段代码,名为dllx.cpp(呃……),里面写上:

#include <iostream>
using namespace std;

#define EXPORT __declspec(dllexport)

extern "C"{
	int EXPORT a_x_b(int a,int b);
}

int a_x_b(int a,int b){
	return a*b;
}

并把test.cpp改成如下代码:
#include <iostream>
#include <cstdio>
using namespace std;

#define EXPORT __declspec(dllimport)

extern "C"
{
    int EXPORT a_b(int a,int b);
    int EXPORT a__b(int a,int b);
    int EXPORT a_x_b(int a,int b);
}

int main(){
    cout << a_b(10,100*10) << endl;
    cout << a__b(10*99, 100) << endl;
    cout << a_x_b(10*10, 10) << endl;
    cin.get();
    return 0;
}

然后编译,输入命令 g++ dllx.cpp -shared -o dllx.dll -Wl,--out-implib,dllx.lib 来把刚刚的 dllx.cpp 编译成.dll。
接着再把test.exe编译一遍,输入命令 g++ -ldll -ldllx test.cpp -o test.exe 来编译test.exe。
怎么样,运行这个exe,是不是输出了10 * 10 * 10的计算结果?



posted @ 2020-02-18 18:20  _Return  阅读(131)  评论(3编辑  收藏