Python中static相关知识小结


Posted in Python onJanuary 02, 2018

非 static 编译

不指定额外参数直接编译 Python:

$ ./configure
$ make

查看所依赖的共享库:

$ ldd python
  linux-vdso.so.1 => (0x00007fffcd95a000)
  libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fab5c350000)
  libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fab5c140000)
  libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fab5bf20000)
  libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fab5bc10000)
  libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fab5b840000)
  /lib64/ld-linux-x86-64.so.2 (0x00007fab5c600000)

static 编译

指定 static 相关参数编译 Python:

$ ./configure LDFLAGS="-static" --disable-shared
$ make LDFLAGS="-static" LINKFORSHARED=" "

发现有部分库未能被编译,编译结果中输出如下内容:

Failed to build these modules:
_bisect      _bsddb       _codecs_cn
_codecs_hk     _codecs_iso2022  _codecs_jp
_codecs_kr     _codecs_tw     _collections
_csv        _ctypes      _ctypes_test
_curses      _curses_panel   _elementtree
_functools     _hashlib      _heapq
_hotshot      _io        _json
_locale      _lsprof      _multibytecodec
_multiprocessing  _random      _socket
_sqlite3      _ssl        _struct
_testcapi     _tkinter      array
audioop      binascii      bz2
cmath       cPickle      crypt
cStringIO     datetime      dbm
fcntl       future_builtins  gdbm
grp        itertools     linuxaudiodev
math        mmap        nis
operator      ossaudiodev    parser
pyexpat      readline      resource
select       spwd        strop
syslog       termios      time
unicodedata    zlib

查看所依赖的共享库:

$ ldd python
  not a dynamic executable

static 编译相关 module

编辑 Modules/Setup.local 为:

# Edit this file for local setup changes
*static*
_bisect _bisectmodule.c
# _bsddb _bsddb.c # 额外依赖PyBSDDB
_codecs_cn cjkcodecs/_codecs_cn.c
_codecs_hk cjkcodecs/_codecs_hk.c
_codecs_iso2022 cjkcodecs/_codecs_iso2022.c
_codecs_jp cjkcodecs/_codecs_jp.c
_codecs_kr cjkcodecs/_codecs_kr.c
_codecs_tw cjkcodecs/_codecs_tw.c
_collections _collectionsmodule.c
_csv _csv.c
# _ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/cfield.c _ctypes/malloc_closure.c _ctypes/stgdict.c # 还依赖Python源中的 libffi
# _ctypes_test # 同_ctypes
# _curses _cursesmodule.c # 额外依赖ncurses
# _curses_panel _curses_panel.c # 额外依赖ncurses
# _elementtree _elementtree.c expat/loadlibrary.c expat/xmlparse.c expat/xmlrole.c expat/xmltok.c expat/xmltok_impl.c expat/xmltok_ns.c # 依赖的libexpat可能编译出错
_functools _functoolsmodule.c
# _hashlib _hashopenssl.c # 额外依赖OpenSSL
_heapq _heapqmodule.c
_hotshot _hotshot.c
_io _io/_iomodule.c _io/bufferedio.c _io/bytesio.c _io/fileio.c _io/iobase.c _io/stringio.c _io/textio.c
_json _json.c
_locale _localemodule.c
_lsprof _lsprof.c rotatingtree.c
_multibytecodec cjkcodecs/multibytecodec.c
# _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/pipe_connection.c _multiprocessing/semaphore.c _multiprocessing/socket_connection.c _multiprocessing/win32_functions.c
_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/socket_connection.c
_random _randommodule.c
_socket socketmodule.c
# _sqlite3 _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c # 额外依赖sqlite3 
# _ssl _ssl.c 额外依赖OpenSSL
_struct _struct.c
_testcapi _testcapimodule.c
# _tkinter _tkinter.c # 额外依赖Tcl/Tk
array arraymodule.c
audioop audioop.c
binascii binascii.c
# bz2 bz2module.c # 额外依赖bzlib
cmath cmathmodule.c
cPickle cPickle.c
# crypt cryptmodule.c # 额外依赖OpenSSL
cStringIO cStringIO.c
datetime datetimemodule.c
# dbm dbmmodule.c # 额外依赖gdbm
fcntl fcntlmodule.c
future_builtins future_builtins.c
# gdbm gdbmmodule.c # 额外依赖gdbm
grp grpmodule.c
itertools itertoolsmodule.c
linuxaudiodev linuxaudiodev.c
math mathmodule.c _math.c
mmap mmapmodule.c
# nis nismodule.c # 依赖glibc/nis
operator operator.c
ossaudiodev ossaudiodev.c
parser parsermodule.c
# pyexpat pyexpat.c # 依赖的libexpat可能编译出错
# readline readline.c # 依赖readline
resource resource.c
select selectmodule.c
spwd spwdmodule.c
strop stropmodule.c
syslog syslogmodule.c
termios termios.c
time timemodule.c
unicodedata unicodedata.c
zlib zlibmodule.c zlib/adler32.c zlib/compress.c zlib/crc32.c zlib/deflate.c zlib/example.c zlib/gzclose.c zlib/gzlib.c zlib/gzread.c zlib/gzwrite.c zlib/infback.c zlib/inffast.c zlib/inflate.c zlib/inftrees.c zlib/minigzip.c zlib/trees.c zlib/uncompr.c zlib/zutil.c

重新编译后能将部分 Modules 编译为 static 库,输出:

Failed to build these modules:
_bsddb     _ctypes     _ctypes_test
_curses     _curses_panel  _elementtree
_hashlib    _sqlite3    _ssl
_tkinter    bz2       crypt
dbm       gdbm      nis
pyexpat     readline

查看所依赖的共享库:

$ ldd python
  not a dynamic executable

参考:

https://wiki.python.org/moin/BuildStatically

Python 相关文章推荐
Python 冒泡,选择,插入排序使用实例
Feb 05 Python
Python中使用装饰器来优化尾递归的示例
Jun 18 Python
python处理html转义字符的方法详解
Jul 01 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
python 请求服务器的实现代码(http请求和https请求)
May 25 Python
基于python的Paxos算法实现
Jul 03 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
Python如何解除一个装饰器
Aug 07 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
什么是Python装饰器?如何定义和使用?
Apr 11 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 #Python
python+selenium实现163邮箱自动登陆的方法
Dec 31 #Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 #Python
利用python将图片转换成excel文档格式
Dec 30 #Python
书单|人生苦短,你还不用python!
Dec 29 #Python
python ansible服务及剧本编写
Dec 29 #Python
详解python 拆包可迭代数据如tuple, list
Dec 29 #Python
You might like
apache mysql php 源码编译使用方法
2012/05/03 PHP
destoon官方标签大全
2014/06/20 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
JavaScript 密码强度判断代码
2009/09/05 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
Python全排列操作实例分析
2018/07/24 Python
python实现自动登录
2018/09/17 Python
自学python的建议和周期预算
2019/01/30 Python
python如何删除文件中重复的字段
2019/07/16 Python
flask框架中的cookie和session使用
2021/01/31 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
网络书店创业计划书
2014/02/07 职场文书
高等教育学自荐书范文
2014/02/10 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
重阳节活动总结
2014/08/27 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
庆六一宣传标语
2014/10/08 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
Python 发送SMTP邮件的简单教程
2021/06/24 Python
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers