模块初始化错误:/var/task/TDNN.dll:无效的 ELF 标头
Posted
技术标签:
【中文标题】模块初始化错误:/var/task/TDNN.dll:无效的 ELF 标头【英文标题】:module initialization error: /var/task/TDNN.dll: invalid ELF header 【发布时间】:2016-05-26 08:36:27 【问题描述】:在搜索各种资源后,主要来自 ***。我可以让我的代码在我的笔记本电脑上运行以下 python 版本(安装了 Windows 10) 1.WinPython3.4 64位 2.WinPython3.4 32位 3. Python 2.7 32 位及其 virtualenv 4. Python 2.7 64位及其virtualenv
然后我希望它部署到 aws lambda。为此,我尝试为所有上述选项一一遵循两个选项 1. 只需压缩 .py 文件即可获取代码和引用的 dll 2. 使用 3 & 4 virtualenv 压缩代码和引用的 dll 的 .py 文件
但在所有这些情况下,我都会在 cloudwatch 中收到“模块初始化错误:/var/task/TDNN.dll: invalid ELF header”错误消息。
我环顾四周,但没有找到任何解决方案。我将不胜感激任何帮助/指针。提前谢谢。
下面是代码
import json
import urllib
import re
import os, sys
import datetime
import math
from math import *
import csv
import time
#import boto3
import ctypes
from ctypes import *
#s3 = boto3.client('s3')
NNepochs=50
inputDataL= [0,0,0,1,0,1,1,0]
desiredDataL= [0,1,1,0,0,0,0,1]
CVInputDataL= [0,0,0,1,0,1,1,0]
CVDesiredDataL= [0,0,0,1,0,1,1,0]
inputData = (ctypes.c_float * len(inputDataL))(*inputDataL)
desiredData = (ctypes.c_float * len(desiredDataL))(*desiredDataL)
CVInputData = (ctypes.c_float * len(CVInputDataL))(*CVInputDataL)
CVDesiredData = (ctypes.c_float * len(CVDesiredDataL))(*CVDesiredDataL)
outputData = (ctypes.c_float * len(desiredDataL))(*desiredDataL)
## NN starts here
#keytdnndll = 'D:/Documents/1. Vultures Pick/AmazonCloud/QCollector/NIFTY/STP/TDNN/TDNN.dll'
keytdnndll='TDNN.dll'
TDNNdll=ctypes.cdll.LoadLibrary(keytdnndll)
createNetwork=getattr(TDNNdll,'createNetwork')
#print(createNetwork, callable(createNetwork))
TDNN=ctypes.c_int()
#print('TDNN pointer', TDNN)
createNetwork(ctypes.byref(TDNN),1)
#print('TDNN pointer', TDNN)
resetNetwork=getattr(TDNNdll,'resetNetwork')
resetNetwork(TDNN)
trainNetwork=getattr(TDNNdll,'train')
setCrossValidationEnabled = getattr(TDNNdll,'setCrossValidationEnabled')
getCrossValidationEnabled = getattr(TDNNdll,'getCrossValidationEnabled')
crossValEnabled=ctypes.c_bool()
getCrossValidationEnabled(TDNN, ctypes.byref(crossValEnabled))
print('crossValEnabled',crossValEnabled)
#print(setCrossValidationEnabled, callable(setCrossValidationEnabled))
true=ctypes.c_char()
setCrossValidationEnabled(TDNN, ctypes.byref(true))
getCrossValidationEnabled(TDNN, ctypes.byref(crossValEnabled))
print('crossValEnabled',crossValEnabled)
epochs = ctypes.c_int(NNepochs)
print('epochs', epochs)
dl=len(inputDataL)
datalength = ctypes.c_int(dl)
print('datalength', datalength)
trainNetwork(TDNN,epochs,datalength,inputData,desiredData,datalength,CVInputData,CVDesiredData)
getEpochOfBestCost = getattr(TDNNdll,'getEpochOfBestCost')
epochnumber=ctypes.c_int()
getEpochOfBestCost(TDNN,ctypes.byref(epochnumber))
print('epochnumber', epochnumber)
getNumberOfEpochsTrained=getattr(TDNNdll, 'getNumberOfEpochsTrained')
epochtrained=ctypes.c_int()
getNumberOfEpochsTrained(TDNN,ctypes.byref(epochtrained))
print('epochtrained', epochtrained)
getResponse=getattr(TDNNdll,'getResponse')
getResponse(TDNN,datalength,inputData,outputData)
floatPtr = ctypes.cast(outputData, ctypes.POINTER(ctypes.c_float))
outputDataL = [floatPtr[i] for i in range(dl)]
print('outputDataL', outputDataL)
destroyNetwork=getattr(TDNNdll,'destroyNetwork')
destroyNetwork(TDNN)
【问题讨论】:
【参考方案1】:默认 AWS 机器运行 Linux,不支持为 Windows 制作的 dll。你必须用 wine 来模拟 Windows 或者找到一个原生的 Linux 解决方案。
AFAIK Amazon 还提供 Windows 机器,这是一种选择。
一般来说,您应该有一个与您的部署环境相匹配的开发环境,至少在操作系统和架构等基础方面。
【讨论】:
谢谢克劳斯。你认为 DLL 必须在 Linux 环境中使用 Windows 重新构建,甚至 virtualenv 也需要在 Linux 环境中使用 Windows 来创建。 DLL 是一种 Windows 格式,它们不是为在 Linux 上运行而设计的。 Linux 等效项是.so
文件。通常需要比重新编译更多的工作来转换。应始终在目标系统上重新创建虚拟环境,这也包括某些包中的 C 二进制文件。
Thnx Klaus,我打算只使用 AWS Lambda 上可用的 Python2.7 以及我的 DLL。当您说需要完成更多工作时 - 我可以请您按顺序列出它们或为这些步骤提供一些参考。我可以用一种或其他语言编写代码,但在涉及系统或跨环境集成时,我是新手。我将非常感谢您的任何帮助。以上是关于模块初始化错误:/var/task/TDNN.dll:无效的 ELF 标头的主要内容,如果未能解决你的问题,请参考以下文章
引导层初始化期间发生错误。 plexus.container.default:无效的模块名称:'default' 不是 Java 标识符
错误:尚未正确初始化 Azure PowerShell 上下文。请导入模块并重试
模块初始化错误:/var/task/TDNN.dll:无效的 ELF 标头
导入错误:无法从部分初始化的模块“matplotlib”导入名称“ft2font”