导入软件包时出现错误“导入rect时DLL加载失败:%1不是有效的Win32应用程序”

如何解决导入软件包时出现错误“导入rect时DLL加载失败:%1不是有效的Win32应用程序”

我正在使用cython软件包来调用Cpp API,在我的cpp代码中,我正在使用ffmpeg库,并且能够使用贝娄命令成功构建代码

python setup.py build_ext --inplace --compiler=msvc

但是当我尝试导入生成的pyd文件时,我得到了错误

PS D:\SiVUE\Backend\Cython\demo> python
Python 3.8.3 (tags/v3.8.3:6f8c832,May 13 2020,22:20:19) [MSC v.1925 32 bit (Intel)] on win32
Type "help","copyright","credits" or "license" for more information.
>>> import rect
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
ImportError: DLL load failed while importing rect: %1 is not a valid Win32 application.
>>> 

下面提供了我的完整代码

header file
#ifndef RECTANGLE_H
#define RECTANGLE_H
#include <iostream>

extern "C"
{
    #include "libavformat/avformat.h"
    #include "libavutil/dict.h"
}

using namespace std;

namespace shapes 
{
    class Rectangle {
        public:
            int x0,y0,x1,y1;
            Rectangle();
            Rectangle(int x0,int y0,int x1,int y1);
            ~Rectangle();
            int getArea();
            int ffmpegFile();
            void getSize(int* width,int* height);
            void move(int dx,int dy);
    };
}

#endif
ffmpegFile()中的

Rectangle.Cpp文件,我主要在调用ffmpeg API


#include <iostream>
#include "Rectangle.hpp"

namespace shapes {
    

    // Default constructor
    Rectangle::Rectangle () {}

    // Overloaded constructor
    Rectangle::Rectangle (int x0,int y1) {
        this->x0 = x0;
        this->y0 = y0;
        this->x1 = x1;
        this->y1 = y1;
    }

    // Destructor
    Rectangle::~Rectangle () {}

    // Return the area of the rectangle
    int Rectangle::getArea () {
        return 10;
    }

    // Get the size of the rectangle.
    // Put the size in the pointer args
    void Rectangle::getSize (int *width,int *height) {
        (*width) = x1 - x0;
        (*height) = y1 - y0;
    }

    // Move the rectangle by dx dy
    void Rectangle::move (int dx,int dy) {
        this->x0 += dx;
        this->y0 += dy;
        this->x1 += dx;
        this->y1 += dy;
    }
    int Rectangle::ffmpegFile()
    {
        AVFormatContext *fmt_ctx = NULL;
        AVDictionaryEntry *tag = NULL;
        int ret = 0;
        char* filename = "D:\\Discovery.mp4";

        if ((ret = avformat_open_input(&fmt_ctx,filename,NULL,NULL)))
            return ret;

        if ((ret = avformat_find_stream_info(fmt_ctx,NULL)) < 0) {
            av_log(NULL,AV_LOG_ERROR,"Cannot find stream information\n");
            return ret;
        }

        while ((tag = av_dict_get(fmt_ctx->metadata,"",tag,AV_DICT_IGNORE_SUFFIX)))
            printf("%s=%s\n",tag->key,tag->value);

        avformat_close_input(&fmt_ctx);
        return ret;
    }
}

用于cpp文件功能和变量的Rectangle.pxd文件声明

cdef extern from "Rectangle.cpp":
    pass
cdef extern from "Rectangle.hpp" namespace "shapes":
    cdef cppclass Rectangle:
        Rectangle() except +
        Rectangle(int,int,int) except +
        int x0,y1
        int getArea()
        void getSize(int* width,int* height)
        void move(int,int)
        int ffmpegFile()

rect.pyx文件,我正在调用cpp API

# distutils: language = c++

from Rectangle cimport Rectangle

cdef class PyRectangle:
    cdef Rectangle c_rect  # Hold a C++ instance which we're wrapping

    def __cinit__(self,int x0,int y1):
        self.c_rect = Rectangle(x0,y1)

    def get_area(self):
        return self.c_rect.getArea()

    def get_size(self):
        cdef int width,height
        self.c_rect.getSize(&width,&height)
        return width,height

    def move(self):
        print(self.c_rect.ffmpegFile())

setup.py 我提供了pyx文件和ffmpeg库路径以及包含路径

from distutils.core import setup
from setuptools import Extension
from Cython.Build import cythonize 

sfc_module = [Extension('rect',sources = ['rect.pyx'],include_dirs = ['D:\\SiVUE\\Backend\\Cython\\demo\\ffmpeg\\include\\'],library_dirs = ['D:\\SiVUE\\Backend\\Cython\\demo\\ffmpeg\\lib\\'],libraries = ['avcodec','avdevice','avfilter','avformat','avutil','postproc','swresample','swscale'],language='c++')]

setup(name = 'superfastcode',version = '1.0',description = 'Python Package with superfastcode C++ extension',ext_modules = cythonize(sfc_module),include_dirs = ['D:\\SiVUE\\Backend\\Cython\\demo\\ffmpeg\\include\\']
    )

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-