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 相关文章推荐
tornado捕获和处理404错误的方法
Feb 26 Python
Python struct模块解析
Jun 12 Python
python打开url并按指定块读取网页内容的方法
Apr 29 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
python正则表达式面试题解答
Apr 28 Python
Python中py文件引用另一个py文件变量的方法
Apr 29 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
python实现多线程端口扫描
Aug 31 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
详解python对象之间的交互
Sep 29 Python
python Scrapy框架原理解析
Jan 04 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
通过html表格发电子邮件
2006/10/09 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
php的debug相关函数用法示例
2016/07/11 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
json简单介绍
2008/06/10 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
python连接mysql实例分享
2016/10/09 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
python 字典操作提取key,value的方法
2019/06/26 Python
python各类经纬度转换的实例代码
2019/08/08 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
Django 返回json数据的实现示例
2020/03/05 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
求职信的要素有哪些呢
2013/12/26 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
创先争优个人总结
2015/03/04 职场文书
致接力运动员加油稿
2015/07/21 职场文书
MySQL 逻辑备份 into outfile
2022/05/15 MySQL