栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

AWS 基于Lambda + Layer实现 调用C++动态包

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AWS 基于Lambda + Layer实现 调用C++动态包

Lambda搭建在linux平台上,基于windows的.dll文件无法调用,需要准备.so文件

lib.cpp

#include
#include

using namespace std;

extern "C"{
    int sum(int x,int y){
        return x + y;
    }

    int times(int x,int y){
        return x * y;
    }
}

使用g++编译

g++ lib.cpp -shared -fPIC -o lib.so

1.使用python 实现

把lib.so放在python/路径下打包上传,或者直接用S3上传layers,这样在执行lambda时会在opt文件夹下找到上传的文件,这种方式更多用于加载依赖包。要注意文件的大小,超过10M的话只能使用S3。

Lambda代码

import json, os
from ctypes import *

def lambda_handler(event, context):
    
    # pDLL = WinDLL("./lib.so")
    # pDll = windll.LoadLibrary("./lib.so")
    # pDll = cdll.LoadLibrary("./lib.so")
    #在opt下找到上传的so库
    pDll = CDLL("/opt/python/lib.so")
    
    #从event获取参数
    num1 = event.get("num1")
    num2 = event.get("num2")
    #调用C++函数
    res1 = pDll.sum(num1,num2)
    print(res1)
    res2 = pDll.times(num1,num1)
    print(res2)
   
    return {
        'statusCode': 200,
        'body': json.dumps({
            'result1' : res1,
            'result1' : res2
        })
    }

2.使用java实现

把lib.so放在java/路径下打包上传,或者直接用S3上传layers,同样在执行lambda时会在opt文件夹下找到上传的文件。同时需要准备跨平台使用C++的jar包jna。

java代码

在使用lambda之前,首先在本地的linux上测试

package com.test

import com.sun.jna.Native

public class Call{
    
    static{
        // 注册动态库
        Native.register("libName");
    }

    // 声明动态库的方法
    public static native int sum(int x,int y);

    public static native int times(int x,int y);

    public static void main(String[] args){

        System.out.printin(Call.sum(22,33));
        System.out.printin(Call.times(22,33));
    }

}

编译

#编译 -应用jar包时,需要用-cp指令,在linux环境,多个jar包需要用:连接
javac -cp /home/user/jna-4.0.0.jar /home/user/com/test/Call.java

#执行
java -cp ".:/home/user/jna-4.0.0.jar"  /home/user/com/test/Call

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739603.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号