精华内容
下载资源
问答
  • <p><img alt="" height="136" src=...使用c能够正常调用该so文件,使用python调用报错: undefined symbol: _Z16DetectStruts2052jiPcS_iRi</p>
  • python调用.so文件

    千次阅读 2020-06-01 09:47:06
    项目需要python调用.so文件,使用网上的教程会抛出异常。而这种方法可以完整调用,但是我忘记当初是怎么写的了。。。如果后面还要用到再来完善。 from ctypes import * adddll=cdll.LoadLibrary("./libpyckapi.so")...

    项目需要python调用.so文件,使用网上的教程会抛出异常。而这种方法可以完整调用,但是我忘记当初是怎么写的了。。。如果后面还要用到再来完善。

    from ctypes import *
    
    adddll=cdll.LoadLibrary("./libpyckapi.so")
    adddll.sendRequestAuthorizationPython.argtypes = [c_char_p]
    adddll.sendRequestAuthorizationPython.restype = c_char_p
    addres = adddll.sendRequestAuthorizationPython(b'')
    print(addres.decode("utf8"))
    
    adddll.getAuthorizationResultPython.argtypes = [c_char_p]
    adddll.getAuthorizationResultPython.restype = c_char_p
    addres = adddll.getAuthorizationResultPython(addres)
    print(addres.decode("utf8"))
    
    展开全文
  • 里面有详细教程和编程实例,指导你如何如何在liunx下编写.so文编并通过python调用,里面涉及到了c++和python的混合编程,简单易学,适合入门者学习!
  • python3调用cpp的方法——python调用so

    万次阅读 2019-09-22 23:19:07
    首先要将C/C++编译成动态库(.so),之后python调用即可 特别注意在调用C++函数需要在函数声明时,加入前缀“ extern “C” ”,这是由于C++支持函数重载功能,在编译时会更改函数名。在函数声明时,前缀extern "C...

    python中使用ctypes模块可以在python中直接调用C/C++。
    首先要将C/C++编译成动态库(.so),之后python中调用即可

    特别注意在调用C++函数需要在函数声明时,加入前缀“ extern “C” ”,这是由于C++支持函数重载功能,在编译时会更改函数名。在函数声明时,前缀extern "C"则确保按C的方式编译。

    值得注意的是,一定要有函数输入输出类型的声明,int型不用转换,float和double类型需要进行转换,
    ctypes中的变量类型与C中对应如下:

    ctypes数据类型C数据类型
    c_charchar
    c_shortshort
    c_intint
    c_longlong
    c_floatfloat
    c_doubledouble
    c_void_pvoid
    c_uint8unsigned char

    使用步骤:

    1、编写c++代码

    #include <iostream>
    #include <string>
    #include <cstdlib>
    #include <vector>
    #include <stdio.h>
    
    
    class Test{
        private:
            double _calculate(int a, double b);
        public:
            double calculate(int a, double b, char c[], int * d, double * e, char ** f);
    };
    
    double Test::_calculate(int a, double b){
        double res = a+b;
        std::cout<<"res: "<<res<<std::endl;
        return res;
    }
    
    double Test::calculate(int a, double b, char c[], int * d, double * e, char ** f){
        std::cout<<"a: "<<a<<std::endl;
        std::cout<<"b: "<<b<<std::endl;
        std::cout<<"c: "<<c<<std::endl;
        std::cout<<"d: "<<d[0]<<d[1]<<std::endl;
        std::cout<<"e: "<<e[0]<<e[1]<<std::endl;
        std::cout<<"f: "<<f[0]<<f[1]<<std::endl;
        return this->_calculate(a, b);
    }
    
    
    // 封装C接口
    extern "C"{
    // 创建对象
        Test* test_new(){
            return new Test;
        }
        double my_calculate(Test* t, int a, double b, char c[], int * d, double * e, char ** f){
            return t->calculate(a, b,c,d,e,f);
        }
    }
    

    2、将cpp编译成so

    g++ -shared -Wl,-soname,test -o test.so -fPIC test.cpp
    

    其中test为cpp的名称

    3、使用python调用即可

    # -*- coding: utf-8 -*-
    import ctypes
    # 指定动态链接库
    lib = ctypes.cdll.LoadLibrary('./test.so')
    #需要指定返回值的类型,默认是int
    lib.my_calculate.restype = ctypes.c_double
    
    class Test(object):
        def __init__(self):
            # 动态链接对象
            self.obj = lib.test_new()
    
        def calculate(self, a, b,c,d,e,f):
            res = lib.my_calculate(self.obj, a, b,c,d,e,f)
            return res
    
    #将python类型转换成c类型,支持int, float,string的变量和数组的转换
    def convert_type(input):
        ctypes_map = {int:ctypes.c_int,
                  float:ctypes.c_double,
                  str:ctypes.c_char_p
                  }
        input_type = type(input)
        if input_type is list:
            length = len(input)
            if length==0:
                print("convert type failed...input is "+input)
                return null
            else:
                arr = (ctypes_map[type(input[0])] * length)()
                for i in range(length):
                    arr[i] = bytes(input[i],encoding="utf-8") if (type(input[0]) is str) else input[i]
                return arr
        else:
            if input_type in ctypes_map:
                return ctypes_map[input_type](bytes(input,encoding="utf-8") if type(input) is str else input)
            else:
                print("convert type failed...input is "+input)
                return null
    
    if __name__ == '__main__':
        t = Test()
        A1	= 123;
        A2	= 0.789;
        A3	= "C789";
        A4	= [456,789];
        A5	= [0.123,0.456];
        A6	= ["A123", "B456"];
        print(t.calculate(convert_type(A1), convert_type(A2), convert_type(A3),convert_type(A4),convert_type(A5),convert_type(A6)))
    
    
    展开全文
  • python调用so

    千次阅读 2019-12-11 13:54:57
    python调用so库 https://blog.csdn.net/frankie110/article/details/8724509 我厂大部分的code都是采用C++写的,有的时候需要进行一些数据分析,又需要用c++里面的很多函数,例如url的转换函数,hash编码的函数,...

    python调用so库 

    https://blog.csdn.net/frankie110/article/details/8724509

    我厂大部分的code都是采用C++写的,有的时候需要进行一些数据分析,又需要用c++里面的很多函数,例如url的转换函数,hash编码的函数,着实不甚方便,这个时候把常用的c++的函数,封装为SO库让python调度就非常有必要的了。

      当然,如果从性能的考虑,你也可以balabal了。

      那么这里就简单描述一下在python中怎么使用so库吧。

      python中使用so库的方法很多,以下三个网页都比较好的描述了怎么操作。

    http://www.isnowfy.com/introduction-to-python-c-extension/  简介了各种调用so的方法。

    http://starship.python.net/crew/theller/ctypes/tutorial.html   介绍了python与so库之间的各个映射关系。

    http://ciniao.me/article.php?id=22  将了python如何调用c语言的分词块。

    当需要采用调用c++的程序的时候,需要对原有的数据加一个extern "C"封装一下即可。

    采用g++编译的代码也需要的,原因可能是因为c++编译器编译后的二进制so文件中,对c++的函数进行了重新的命名导致的。

    extern "C" {
        Foo* Foo_new(){ return new Foo(); }
        void Foo_bar(Foo* foo){ foo->bar(); }
    }
    以下两个网页又更详细的介绍
    http://blog.waterlin.org/articles/using-python-ctypes-to-link-cpp-library.html

    http://stackoverflow.com/questions/145270/calling-c-c-from-python

    最后需要补充的一个问题是:当我调用so文件的时候,会发生一个有趣的现象:

    我把python放到streaming找运行的时候,发现streaming始终查找不到so,但是数据却是被上传到hadoop的对应的work目录下。

    后来定位到原因:

    是python加载动态库方面是默认从系统lib库上查找库文件。
    我的目录在当前目录下,所以需要从libdy.so变为./libdy.so

    同时奇怪的是,在本地有ok。不解~ 

    相对以前用java来调用so,感觉python更朴实一下哈。
     

    展开全文
  • python调用so的库文件方法

    千次阅读 2016-12-03 10:54:01
    http://blog.chinaunix.net/uid-27685749-id-4109377.html
    http://blog.chinaunix.net/uid-27685749-id-4109377.html
    展开全文
  • bfs.cpp:11:15: error: expected constructor, destructor, or type conversion before ‘(’ token  __declspec(dllexport) windows到linux的转换: windows下: #include #include #include ...
  • 单个.c文件生成.so: cd /d D:\Program Files (x86)\MinGW\bin gcc "D:\VisulStudio\gccSPA\gccSPA\SolarPosAngle.c" -fPIC -shared -o "D:\VisulStudio\gccSPA\gccSPA\gccSPA.so" python中调用...
  • 多数情况下是带有.dll扩展名的文件,也可能是.ocx等,linux系统通常是.so文件。 1、vs创建项目 打开vs,新建win32项目, 点击完成。 2、vs已经生成相关文件, 现在需要在项目的cpp下面写dll文件: 比如,写一个...
  • ubuntu下python调用含有opencv Mat类型的so文件的方法ubuntu生成so文件的方法python调用so库文件 ubuntu生成so文件的方法 参考我的这篇文章:Ubuntu生成so共享库的方法 生成的共享库文件名为libopencv_draw_...
  • python调用Linux下so文件

    2020-09-28 19:26:00
    1、通过C语言编写一个简单max函数,生成一个max.so链接库 /* * # -shared 为链接库 让编译器知道是要编译一个共享库 * # -fPIC(Position Independent Code) 编译生成代码与位置无关 */ int max(int a,int b) { ...
  • python调用.so LINUX下C++生成.so文件及编译生成可执行文件的过程 [linux][原创]C++ so库的编译python调用 python 打包成 so | python 调用cpp | python 调用C++简单例子 C++转so文件 这里以简单的加法为例,...
  • python调用.so

    2017-03-18 12:43:00
    以linux平台为例说明python调用.so文件的使用方法。 本例中默认读者已经掌握动态链接库的生成方法,如果不太清楚的可以参考动态链接库的使用 调用上例动态链接库的使用中的sum.so import ctypes so = ctypes.CDLL('....
  • Python调用MATLAB文件

    千次阅读 2018-09-25 00:49:31
    Python 3.5或者Python 2.7 MATLAB R2018a Ubuntu 16.04 安装步骤 参考这里安装MATLAB-engine 在 Windows 或者 Linux 系统中 cd matlabroot/extern/engines/python python setup.py install 在Python终端...
  • 我把python文件生成了一个so文件,那么我在java项目中应该如何调用
  • Make成python可以调用的.so文件,并且包含例子。Make成python可以调用的.so文件,并且包含例子。
  • 【亲测】python调用so文件

    千次阅读 2017-07-04 09:49:04
    文章链接: ...
  • 我在使用python调用c++程序时,先用g++把我的.hpp文件编译成.so文件,在运行python程序时出现下面的错误: Traceback (most recent call last): File "pos.py", line 2, in <module> pos = CDLL('./...
  • python调用dll文件接口

    万次阅读 2017-07-09 23:16:33
    使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so文件),下面将详细的讲解这个模块(以windows平台为例子),当然我假设你们已经对windows下怎么写一个DLL是没有问题的。   引入ctypes...
  • python 调用so dll动态链接库

    千次阅读 2012-09-09 19:28:58
    ctypes使得python能够直接调用c语言开发的动态链接库,非常强大。 为了使用CTypes,你必须依次完成以下步骤: * 编写动态连接库程序 * 载入动态连接库 * 将Python的对象转换为ctypes所能识别的参数 * 使用...
  • 最近由于老师手头上的项目需要,学习一下如何在python调用c语言文件。 安装MinGW 首先需要安装MinGW 下载. 注意要安装下图中选择的包。 配置环境变量 检查是否安装成功 但是目前在windows上仍然会有一些问题。 ...
  • c 生成.so 文件python 调用.so

    千次阅读 2015-07-30 12:58:33
    gcc -Wall -fPIC -c -lm xxx.c gcc -shared -o xxx.so xxx.o from ctypes import cdll  ib = cdll.LoadLibrary("./xxx.so")
  • 这个cpp的功能是 “加法器”,extern “C”的存在是因为python 的ctype可以调用C但是没有Cplustype~~~所以,~~~ #include "/home/oujie/anaconda3/envs/pytorch-master/include/python3.7m/Python.h" #...
  • 本人想python调用动态库的一个接口,接口其中一个参数是接口类的指针,不知如何调用,请大牛指教,不胜感激 1、so接口函数 ``` //导出接口函数 extern "C" int CreateCardReaderDevice(const char *pName, ...
  • 通过Python调用c++文件,生成一个序列,包含10个随机的(0,1)序列,涉及到python为c++函数提供指针型变量和数组型变量。 2 c++实现 c++实现的头文件: //DataGen.h #ifndef DATAGEN_H #define DATAGEN
  • Python 调用 .so / .dll

    千次阅读 2019-04-22 16:28:16
    python 调用 .so 文件 1. 第一个样例 通过C语言编写一个简单max函数,生成一个max.so链接库 /* * # -shared 为链接库 让编译器知道是要编译一个共享库 * # -fPIC(Position Independent Code) 编译生成代码与位置...
  • https://blog.csdn.net/foreverhehe716/article/details/82841567
  • 今天小编就为大家分享一篇Python编译成.so文件进行加密后调用的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,654
精华内容 19,061
关键字:

python调用so文件

python 订阅