Mac和Windows生成Dll

前言

最近在做一个项目的时候,老师让我把核心代码写到DLL中就是动态链接库里面。然后用Python来调用,这样就不会泄露核心代码了。

Mac操作

创建项目

用Mac来做这些操作的话就相对简单一点。我们用的是Clion,就是jetbrain的C++编辑器。
首先创建一个项目,如下图:

创建CPP

在main.cpp 中写入如下代码:

#include <iostream>
#include "main.h"
using namespace std;
void hello(){
    std::cout << "hello,world" << endl;

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

创建h

在项目中新建一个main.h文件,然后在其中写入:

#ifdef __cplusplus
extern "C"{
#endif


#ifndef MYLIBTEST_MAIN_H
#define MYLIBTEST_MAIN_H
void hello();
int sum(int a,int b);
#endif //MYLIBTEST_MAIN_H
#ifdef __cplusplus
};
#endif

CmakeLists

最后就是CmakeLists文件,写入如下:

cmake_minimum_required(VERSION 3.9)
project(MyLibTest)
set(CMAKE_CXX_STANDARD 11)
set(MYLIBLIB main.h main.cpp)
add_library(MyLibTest SHARED ${MYLIBLIB})

如果有cmake的版本不对,比指定的低,就把第一行的版本改成你自己的版本就好了。

编译操作

切到对应目录
输入

cmake .
make

如下图:


这样之后就会在对应的项目目录有一个dylib的文件,用Python调用这个文件就可以了。

Py调用

在动态库生成成功之后,就可以使用了,但是这个dylib只能在Mac使用,Windows是dll,Linux是so。
对应的Py代码如下:

import ctypes
dll = ctypes.CDLL("./libmylib.dylib")
print(dll.add(1,2))
dll.hello()

运行的结果如下:

Win

Windows下就是使用万能的VS就可以了,我用的是VS2015.

创建项目

首先使用VS来创建C++项目。

进行命名之后就是详细的设置。

这里要设置成空项目,不然就会有乱七八糟的各种文件。
点击完成后,就在项目中添加dll.cpp,dll.h

编辑代码

dll.cpp:

#include <windows.h>
#include "dll.h"
#include <iostream>
using namespace std;
EXPORT int sum(int a, int b)
{
	return a + b;
};
EXPORT void hello() {
	printf("%s\n", "hello,world");
}

dll.h:

#pragma once
#ifndef DLLTEST_H
#define DLLTEST_H

#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif

EXPORT int sum(int a, int b);
EXPORT void hello();
#endif

这里完成之后,就可以生成解决方案了。
但是,这里有一个一定要注意的点。
x86一定要换成x64,不然就会生成32位的,Python调用会出错,不是有效的win32程序

这样在项目的文件夹下面就会有dll文件了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值