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 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
解决python3 urllib中urlopen报错的问题
Mar 25 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
使用tensorflow实现线性回归
Sep 08 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
Python yield的用法实例分析
Mar 06 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 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
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
完善的jquery处理机制
2016/02/21 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
高一英语教学反思
2014/01/22 职场文书
施工安全标语
2014/06/07 职场文书
百日安全生产活动总结
2014/07/05 职场文书
安全生产月标语
2014/10/07 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
bose降噪耳机音能消除人声吗
2022/04/19 数码科技