Python中static相关知识小结
非static编译
不指定额外参数直接编译Python:
$./configure $make
查看所依赖的共享库:
$lddpython 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:
$./configureLDFLAGS="-static"--disable-shared $makeLDFLAGS="-static"LINKFORSHARED=""
发现有部分库未能被编译,编译结果中输出如下内容:
Failedtobuildthesemodules: _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_tkinterarray audioopbinasciibz2 cmathcPicklecrypt cStringIOdatetimedbm fcntlfuture_builtinsgdbm grpitertoolslinuxaudiodev mathmmapnis operatorossaudiodevparser pyexpatreadlineresource selectspwdstrop syslogtermiostime unicodedatazlib
查看所依赖的共享库:
$lddpython notadynamicexecutable
static编译相关module
编辑Modules/Setup.local为:
#Editthisfileforlocalsetupchanges *static* _bisect_bisectmodule.c #_bsddb_bsddb.c#额外依赖PyBSDDB _codecs_cncjkcodecs/_codecs_cn.c _codecs_hkcjkcodecs/_codecs_hk.c _codecs_iso2022cjkcodecs/_codecs_iso2022.c _codecs_jpcjkcodecs/_codecs_jp.c _codecs_krcjkcodecs/_codecs_kr.c _codecs_twcjkcodecs/_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.cexpat/loadlibrary.cexpat/xmlparse.cexpat/xmlrole.cexpat/xmltok.cexpat/xmltok_impl.cexpat/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.crotatingtree.c _multibytecodeccjkcodecs/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 _socketsocketmodule.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 arrayarraymodule.c audioopaudioop.c binasciibinascii.c #bz2bz2module.c#额外依赖bzlib cmathcmathmodule.c cPicklecPickle.c #cryptcryptmodule.c#额外依赖OpenSSL cStringIOcStringIO.c datetimedatetimemodule.c #dbmdbmmodule.c#额外依赖gdbm fcntlfcntlmodule.c future_builtinsfuture_builtins.c #gdbmgdbmmodule.c#额外依赖gdbm grpgrpmodule.c itertoolsitertoolsmodule.c linuxaudiodevlinuxaudiodev.c mathmathmodule.c_math.c mmapmmapmodule.c #nisnismodule.c#依赖glibc/nis operatoroperator.c ossaudiodevossaudiodev.c parserparsermodule.c #pyexpatpyexpat.c#依赖的libexpat可能编译出错 #readlinereadline.c#依赖readline resourceresource.c selectselectmodule.c spwdspwdmodule.c stropstropmodule.c syslogsyslogmodule.c termiostermios.c timetimemodule.c unicodedataunicodedata.c zlibzlibmodule.czlib/adler32.czlib/compress.czlib/crc32.czlib/deflate.czlib/example.czlib/gzclose.czlib/gzlib.czlib/gzread.czlib/gzwrite.czlib/infback.czlib/inffast.czlib/inflate.czlib/inftrees.czlib/minigzip.czlib/trees.czlib/uncompr.czlib/zutil.c
重新编译后能将部分Modules编译为static库,输出:
Failedtobuildthesemodules: _bsddb_ctypes_ctypes_test _curses_curses_panel_elementtree _hashlib_sqlite3_ssl _tkinterbz2crypt dbmgdbmnis pyexpatreadline
查看所依赖的共享库:
$lddpython notadynamicexecutable
参考:
https://wiki.python.org/moin/BuildStatically
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。