C模块+Python编译安装方式
来源:互联网 发布:财务报表制作软件 编辑:程序博客网 时间:2024/05/10 00:38
1、C代码编译安装过程
1.1 configure(某些是config)
configure的主要作用根据当前的目标平台生成Makefile文件。
(1)模块编译选项:configure文件一般在随源码发布时定制了一些和该应用直接相关的模块编译选项,当打开或关闭某些模块开关选项时,这些模块将被或者不被编译,从而控制该应用是否支持相应的功能模块。具体可以通过./configure --help来查看模块编译开关选项--with(out)-*,并在在生成Makefile时进行设置。
(2)依赖库默认搜索目录:当生成Makefile时设置的默认依赖库目录是'/lib64', '/usr/lib64','/lib', '/usr/lib',在make时将依据Makefile中列出的依赖库目录列表,按照先后顺序搜索模块编译时的依赖库,同名的依赖库只有首次出现的才会被使用,当再次发现同名的依赖库时将被直接忽略,因此依赖库的搜索目录列表中的目录先后顺序至关重要。
(3)自定义依赖库目录:(1)由于make时只使用首次发现的同名lib库,因此需要使用自定义的依赖库来使make时优先搜索自定义的依赖库路径,通过先设置相应的环境变量,再执行./configure可以达到这个目的,具体哪些环境变量可以对./configure的执行产生影响,最终影响产出的Makefile,可以通过./configure --help来查看,其被搜索的优先级高于默认的依赖库搜索目录列表。(2)也可以通过设置系统环境变量LD_LIBRARY_PATH来加入自定义的依赖库搜索目录,其被搜索的优先级同样也高于默认的依赖库搜索目录列表。
1.2 make && make install
make执行编译,make install执行安装,可以在执行make命令时通过”make | grep module_name” 来校验某一模块的具体编译参数以确定该模块的编译时使用的依赖库头文件和链接的依赖库准确无误。
在完成编译后,同样可以使用ldd命令来校验某一*.so或二进制文件所使用的真实依赖库文件路径。
1.3多级依赖的传递问题
当一个二进制文件bin_x依赖某一特定版本库模块module_v_x时(自定义编译安装),而在默认依赖库搜索目录下又存在同样版本的依赖库文件时,可能会出现一种情况:不论在编译阶段如何设置各种环境变量来加入自定义的依赖库搜索目录,在使用ldd bin_x命令查看依赖的库文件时会发现该模块所指向的依赖库文件依然指向默认搜索目录下和moudue_v_x版本相同的依赖库sys_module_v_x,这可能是由于module_v_x源码自身内部定义的编译选项所决定的,当执行lddmodule_v_x会发现所依赖的库文件指向了sys_module_v_x。 如果默认搜索目录中没有和module_v_x相同版本的库文件,则执行ldd bin_x时会发现二进制文件bin_x的该依赖库会正确的指向自定义搜索目录下的module_v_x库文件。
2、Python模块编译安装
2.1 Python安装
源码编译并安装。
2.2外部依赖安装
(1)C模块:这种模块需要先于python源码进行编译安装,然后在python源码目录下的setup.py文件中寻找是否有该模块的配置项并进行配置,包括*/include,*/lib路径的配置,比如sqlite3、SSL等。安装ssl后测试是否成功时可以在python控制台执行命令”from urllib import request”。如果发生了core,执行gdb where显示core发生在EVP_PKEY_CTX_dup处则很可能是由于编译时使用的ssl库头文件和实际加载的库文件*.so版本不一致引起的,这时查看_ hashlib 模块实际使用的ssl依赖库会发现加载的并不是目标ssl库,修改Setup.dict中ssl的配置,同时加入自定义的ssl依赖库路径重新编译安装即可。(lddbuild/lib.linux-x86_64-3.5/_hashlib.cpython-35m-x86_64-linux-gnu.so) 编译安装ssl相关的问题: http://stackoverflow.com/questions/22409092/coredump-when-compiling-python-with-a-custom-openssl-version
(2)python模块:此类模块实际上是使用python开发的功能模块,不需要编译安装,直接执行模块模块下的python setup.py install即可,此安装过程会将相应的模块打包至python的安装目录并在python中设置相应的模块加载参数以便可以使用该模块。安装第三方python模块的过程实际上是通过调用模块setuptools的Setup(…,…,…)函数进行安装,这也是一个python模块,因此在安装第三方python模块时需要先安装setuptools模块,它可以不需要借助第三方模块自行进行安装,安装命令同安装其它第三方python模块。
- C模块+Python编译安装方式
- python模块安装方式
- 安装python模块,常用安装方式
- 编译C代码为python模块(pyd)
- python模块编译安装工具和问题
- Python模块常用的安装方式
- python模块的常用安装方式
- Python常用模块的安装方式
- python模块安装方式及相关问题
- python模块的常用安装方式
- 使用模块编译的方式编译多个.c源文件
- python的安装方式与python模块的安装
- Python调用C模块(一):C api方式
- 模块编译方式
- 模块的编译方式
- 为Sybase ASE15.x编译安装python-sybase模块
- #PYTHON# 编译并安装第三方模块遇到的问题
- Python在windows下安装模块出现编译错误解决方法
- Currency Exchange POJ1860 bellman_ford
- opengles图像处理之平滑过滤
- 文章标题
- 刚刚开始学习前端跟新入行的同学共同进步!
- 基于Log演示一个activity生命周期
- C模块+Python编译安装方式
- CODEVS 3285 转圈游戏
- linux安装svn步骤
- 单击事件开启线程时,再次单击就会出现 java.lang.IllegalThreadStateException: Thread already started. 错误
- ROS在NanoPi2上的源码编译
- 从activity跳转至fragment页面
- linux 远程登陆命令 telnet
- Android的Handler机制用法
- 姚虹波老师简介