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抓取网页图片并放到指定文件夹
Apr 24 Python
Python实现拼接多张图片的方法
Dec 01 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 Python
python动态性强类型用法实例
May 09 Python
Python自动化运维_文件内容差异对比分析
Dec 13 Python
python+numpy实现的基本矩阵操作示例
Jul 19 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
Python面向对象封装操作案例详解 II
Jan 02 Python
python操作yaml说明
Apr 08 Python
DataFrame.groupby()所见的各种用法详解
Jun 14 Python
Django路由层URLconf作用及原理解析
Sep 24 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
MySQL修改密码方法总结
2008/03/25 PHP
php笔记之常用文件操作
2010/10/12 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
python正则分组的应用
2013/11/10 Python
详细介绍Python中的偏函数
2015/04/27 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
对python多线程与global变量详解
2018/11/09 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
社区学雷锋活动策划方案
2014/01/30 职场文书
年终总结会议主持词
2014/03/17 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
认真学习保证书
2015/02/26 职场文书
开国大典观后感
2015/06/04 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python