非 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中static相关知识小结

本文地址: http://www.cppcns.com/jiaoben/python/216546.html

python static 的用法_Python中static相关知识小结相关推荐

  1. python isnumeric函数用法_Python中isnumeric()方法的使用简介

    Python中isnumeric()方法的使用简介 更新时间:2015年05月19日 09:35:06 投稿:goldensun 这篇文章主要介绍了Python中isnumeric()方法的使用,is ...

  2. python的继承用法_python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  3. python if函数用法_python中if条件中的Contains()函数“in”

    我对contains()in的功能做了一些研究,特别是与eq()==进行了比较,发现它可以完成许多任务.我设法回答了其中许多问题(见下文). 除了下面的用法之外,in还有其他有用的用法吗,例如对象?在 ...

  4. python or的用法_python中and和or的用法

    原博文 2013-01-19 13:40 − From <dive into python> python 中的and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第 ...

  5. python中类的用法_Python中的类和方法使用举例

    成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, obj = ...

  6. python的继承用法_Python 中的继承之Super用法

    以下Copy自官方文档说明,可点击查看官网源文 翻译内容属于德德自译,有不当之处请指正,勿喷... 翻译括弧中是德德自己理解,通过代码验证的,勿喷... super(type[, object-or- ...

  7. python 遍历函数用法_python中enumerate函数遍历元素用法分析

    本文实例讲述了python中enumerate函数遍历元素用法.分享给大家供大家参考,具体如下: enumerate函数用于遍历序列中的元素以及它们的下标 示例代码如下: i = 0 seq = [' ...

  8. python loads的用法_Python中json.loads方法

    Python中json.loads方法的典型用法代码 示例1: _initialize_members # 需要导入模块: import json [as 别名] # 或者: from json im ...

  9. python语句关键词用法_python中关键字as的使用方法简介

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/zhtysw/article/detai ...

最新文章

  1. Docker官方文档翻译4
  2. css深入浅出 宽度和高度
  3. android新建view类,android – 无法创建ViewModel类的实例(无法启动活动ComponentInfo)
  4. 本能富可敌国,最后却选择拯救世界!Bram的Vim和乌干达儿童
  5. php键值对数组排序,PHP按指定键值对二维数组进行排序的方法_PHP
  6. Win32 程序运行原理
  7. vivo6.0系统怎么样不用root激活XPOSED框架的方法
  8. Linux kernel crash定位
  9. Python numpy 多维数组切片
  10. es6 箭头函数后面的大括号
  11. 【字体分享】这么Q萌的字母设计你肯定没见过
  12. 为什么员工 996 多猝死,而企业家 996 甚至 9127 却很少听到有猝死的?答案原来是.....
  13. 动态网页编程新手入门必读
  14. fa-cog css,完整的Font Awesome 3.2.1 图标参考
  15. 干货!基于常识图谱和混合策略的情绪支持对话系统
  16. 小米计算机无法清除,小米蓝牙怎么删除不常用设备
  17. H5页面嵌套在APP中的坑
  18. C++ strcpy strcpy_s strncpy strlcpy
  19. Spanish FF Live Support
  20. 简介Bitmap、YUV,NV21与Bitmap互转

热门文章

  1. 一周完成的小项目-某银行短信发送
  2. Mongodb java 例子
  3. 搭建nfs,实现linux之间共享存储
  4. mysql 日期和时间类型
  5. centos清楚缓存
  6. python脚本判断一个数是否为素数的几种方法
  7. jxl创Excel档java示例代码说明
  8. R12 - OM改进了对成本与收入确认的流程
  9. 通用的N-Tier模型合理么?
  10. 程序员常见保健方法【转贴】