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模块。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大麦网演唱会的票售罄了怎么办 国内转机航班第一班延误了怎么办 联程机票下一程航班被取消怎么办 联程机票第一班航班取消怎么办 联程机票第二段航班被取消怎么办 联程航班第一程延误行李怎么办 联程航班未赶上第二程行李怎么办 高铁晚点赶不上下一趟动车怎么办? 动车晚点赶不上下一趟车怎么办 动车晚点导致没赶上下一趟怎么办 浙大三位一体选考分数报错了怎么办 报到证上时间到期了还没报到怎么办 不停的打嗝已经超过24小时怎么办 面对不给下属做主的领导怎么办 法院说退款受伤人去不了证明怎么办 e栈快递柜没收到短信怎么办 京东快递放门卫丢了怎么办 丰巢快递柜收不到取件码怎么办 丰巢快递柜手机号码填错了怎么办 e栈手机号换了取不出来怎么办 买高铁票起点一样终点不一样怎么办 定火车票把名字写错一个字怎么办 火车票坐完车票丢了报销怎么办 客户交给我的钱被骗了怎么办 要证明网络来源的可靠性该怎么办 魅族手机高德地图信号弱怎么办 t恤的印花粘粘的怎么办 从包图网下载的模板素材丢失怎么办 大屏导航的语音功能怎么办用 手机导航不走地图上面走时怎么办 行车撞到步行人死亡师机逃离怎么办 小天才平板电脑不显示了怎么办 高德地图导航不显示车速怎么办 桥梁梁片强度达不到设计要求怎么办 新车交车检验表客户没签字怎么办 中铁快运职工拒绝提货要怎么办 奇瑞a3暖风水箱爆了怎么办 别人挖鱼塘占了我的山土怎么办 自己的鱼塘让别人强行占住了怎么办 公路扩路占地占了鱼塘怎么办? 玉米皮编垫子编好后玉米绳怎么办