zoukankan      html  css  js  c++  java
  • python2-gst0.10制作静态包的补丁

    gst制作成了静态库,而python2的gst有多个动态库引用gst的库

    因此,想了一个办法将python2所需要的gst打包成一个单独的共享库

    办法就是,将python2_gst所有的.so先制作成.a

    通过nm -g加过滤的办法得到所有链接的gst函数

    将这些函数生成一个小文件,在一个静态函数中引用所有这些函数

    然后,将这个小文件编译成so文件,并链接gst库,这样,python2_gst所需要的gst函数就全部链接进来了

    同时,可以将gst动态插件的方式也在启动时就注册进来,那样,python2_gst得到的包就是自包含的了

    diff -Nur gst-python-0.10.22_test/codegen/gen_gst_import_code.py gst-python-0.10.22/codegen/gen_gst_import_code.py
    --- gst-python-0.10.22_test/codegen/gen_gst_import_code.py	2015-01-18 22:01:56.753066000 +0800
    +++ gst-python-0.10.22/codegen/gen_gst_import_code.py	1970-01-01 08:00:00.000000000 +0800
    @@ -1,32 +0,0 @@
    -import os,sys
    -
    -def main(argv):
    -    if len(argv) < 3:
    -        print "need more params."
    -        return -1
    -
    -    src_file = argv[1]
    -    dest_file = argv[2]
    -    try:
    -        s_handle = open(src_file, "r")
    -        s_buff = s_handle.readlines()
    -        s_handle.close()
    -    except Exception, detail:
    -        print "Exception: {0}".format(detail)
    -        return -1
    -    try:
    -        d_handle = open(dest_file, "w")
    -        for line in s_buff:
    -            d_handle.write("extern void %s ();
    " % line[:-1])
    -        d_handle.write("
    static void __gst_import_functions ()
    {
    ")
    -        for line in s_buff:
    -            d_handle.write("    %s ();
    " % line[:-1])
    -        d_handle.write("}
    
    ")
    -        d_handle.close()
    -    except Exception, detail:
    -        print "Exception: {0}".format(detail)
    -        return -1
    -    return 0
    -     
    -if __name__ == '__main__':
    -    sys.exit(main(sys.argv))
    diff -Nur gst-python-0.10.22_test/codegen/gen_imp_code.sh gst-python-0.10.22/codegen/gen_imp_code.sh
    --- gst-python-0.10.22_test/codegen/gen_imp_code.sh	2015-01-19 03:03:07.211836824 +0800
    +++ gst-python-0.10.22/codegen/gen_imp_code.sh	1970-01-01 08:00:00.000000000 +0800
    @@ -1,4 +0,0 @@
    -#!/bin/sh
    -
    -nm -g $1 | grep " U " | awk "{ print $2}" | grep "^gst_"
    -
    diff -Nur gst-python-0.10.22_test/gst/gst_static_plugin_reg.c gst-python-0.10.22/gst/gst_static_plugin_reg.c
    --- gst-python-0.10.22_test/gst/gst_static_plugin_reg.c	2015-01-18 23:20:09.490976826 +0800
    +++ gst-python-0.10.22/gst/gst_static_plugin_reg.c	1970-01-01 08:00:00.000000000 +0800
    @@ -1,4 +0,0 @@
    -
    -void init_register_static_gst_plugin()
    -{
    -}
    diff -Nur gst-python-0.10.22_test/gst/Makefile.am gst-python-0.10.22/gst/Makefile.am
    --- gst-python-0.10.22_test/gst/Makefile.am	2015-01-19 03:51:50.722665473 +0800
    +++ gst-python-0.10.22/gst/Makefile.am	2011-10-20 20:31:28.000000000 +0800
    @@ -53,9 +53,9 @@
     
     # GStreamer bindings
     _gst_la_CFLAGS = $(common_cflags)
    -_gst_la_LIBADD = $(common_libadd)
    +_gst_la_LIBADD = $(common_libadd) $(GST_BASE_LIBS)
     _gst_la_LDFLAGS = $(common_ldflags) -export-symbols-regex "^(init_gst|_PyGObject_API|pygstminiobject_).*" 
    -	-lgst_pack
    +	$(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_NET_LIBS) $(GST_DP_LIBS)
     _gst_la_SOURCES = 		
     	gst-argtypes.c 		
     	gstmodule.c 		
    @@ -90,9 +90,9 @@
     
     # GStreamer interfaces bindings
     interfaces_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS)
    -interfaces_la_LIBADD = $(common_libadd) #-lgstinterfaces-$(GST_MAJORMINOR) 
    +interfaces_la_LIBADD = $(common_libadd) -lgstinterfaces-$(GST_MAJORMINOR) 
     interfaces_la_LDFLAGS = $(common_ldflags) 
    -	-export-symbols-regex "^(initinterface|_PyGObject_API).*" -lgst_pack
    +	-export-symbols-regex "^(initinterface|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
     interfaces_la_SOURCES = interfacesmodule.c
     nodist_interfaces_la_SOURCES = interfaces.c
     INTERFACES_OVERRIDES = interfaces.override xoverlay.override
    @@ -103,9 +103,9 @@
     
     # GStreamer pbutils bindings
     pbutils_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS)
    -pbutils_la_LIBADD = $(common_libadd)  -lgst_pack
    +pbutils_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-0.10
     pbutils_la_LDFLAGS = $(common_ldflags) 
    -	-export-symbols-regex "^(initpbutils|_PyGObject_API).*" -lgst_pack
    +	-export-symbols-regex "^(initpbutils|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
     pbutils_la_SOURCES = pbutilsmodule.c gst-argtypes.c
     nodist_pbutils_la_SOURCES = pbutils.c
     PBUTILS_OVERRIDES = pbutils.override
    @@ -127,9 +127,9 @@
      audio_lib = audio.la
      pygstexec_LTLIBRARIES += $(audio_lib)
      audio_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS)
    - audio_la_LIBADD = $(common_libadd) #$(GST_PLUGINS_BASE_LIBS) -lgstaudio-0.10
    + audio_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-0.10
      audio_la_LDFLAGS = $(common_ldflags) 
    -	-export-symbols-regex "^(initaudio|_PyGObject_API).*"  -lgst_pack #$(GST_PLUGINS_BASE_LIBS)
    +	-export-symbols-regex "^(initaudio|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
      audio_la_SOURCES = audiomodule.c gst-argtypes.c
      nodist_audio_la_SOURCES = audio.c
     audio.c: $(AUDIO_DEFS) $(AUDIO_OVERRIDES) $(GEN_FILES)
    @@ -149,9 +149,9 @@
      video_lib = video.la
      pygstexec_LTLIBRARIES += $(video_lib)
      video_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS)
    - video_la_LIBADD = $(common_libadd) #$(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10
    + video_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10
      video_la_LDFLAGS = $(common_ldflags) 
    -	-export-symbols-regex "^(initvideo|_PyGObject_API).*" -lgst_pack # $(GST_PLUGINS_BASE_LIBS)
    +	-export-symbols-regex "^(initvideo|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
      video_la_SOURCES = videomodule.c gst-argtypes.c
      nodist_video_la_SOURCES = video.c
     video.c: $(VIDEO_DEFS) $(VIDEO_OVERRIDES) $(GEN_FILES)
    @@ -171,105 +171,15 @@
      tag_lib = tag.la
      pygstexec_LTLIBRARIES += $(tag_lib)
      tag_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS)
    - tag_la_LIBADD = $(common_libadd) # $(GST_PLUGINS_BASE_LIBS) -lgsttag-0.10
    + tag_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgsttag-0.10
      tag_la_LDFLAGS = $(common_ldflags) 
    -	-export-symbols-regex "^(inittag|_PyGObject_API).*"  -lgst_pack #$(GST_PLUGINS_BASE_LIBS)
    +	-export-symbols-regex "^(inittag|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
      tag_la_SOURCES = tagmodule.c gst-argtypes.c
      nodist_tag_la_SOURCES = tag.c
     tag.c: $(TAG_DEFS) $(TAG_OVERRIDES) $(GEN_FILES)
     
     endif
     
    -libgst_pack_lib = libgst_pack.la
    -pygstexec_LTLIBRARIES += $(libgst_pack_lib)
    -libgst_pack_la_SOURCES = gst_static_plugin_reg.c
    -
    -libgst_pack_la_CFLAGS = $(common_cflags) -fPIC
    -libgst_pack_la_LIBADD = $(common_libadd) $(GST_BASE_LIBS)
    -libgst_pack_la_LDFLAGS = -shared -fPIC $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_NET_LIBS) $(GST_DP_LIBS)
    -nodist_libgst_pack_la_SOURCES = lib_gst.c
    -CLEANFILES += lib_gst.c
    -noinst_LIBRARIES = lib_gst.a
    -lib_gst_a_CFLAGS = $(_gst_la_CFLAGS)
    -lib_gst_a_SOURCES = $(_gst_la_SOURCES) $(nodist__gst_la_SOURCES)
    -_gst_la_DEPENDENCIES = $(libgst_pack_lib)
    -lib_gst.c: lib_gst.a
    -
    -
    -if HAVE_PYGOBJECT_2_16
    -libgst_pack_la_LDFLAGS += $(GST_LIBS) $(GST_OPTION_LIBS)
    -nodist_libgst_pack_la_SOURCES += libgstoption.c
    -CLEANFILES += libgstoption.c
    -noinst_LIBRARIES += libgstoption.a
    -libgstoption_a_CFLAGS = $(common_cflags)
    -libgstoption_a_SOURCES = ../gstoptionmodule.c
    -libgstoption.c: libgstoption.a
    -
    -
    -endif
    -
    -libgst_pack_la_LDFLAGS += $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-$(GST_MAJORMINOR) 
    -nodist_libgst_pack_la_SOURCES += libinterfaces.c
    -CLEANFILES += libinterfaces.c
    -noinst_LIBRARIES += libinterfaces.a
    -libinterfaces_a_CFLAGS = $(interfaces_la_CFLAGS)
    -libinterfaces_a_SOURCES = $(interfaces_la_SOURCES) $(nodist_interfaces_la_SOURCES)
    -interfaces_la_DEPENDENCIES = $(libgst_pack_lib)
    -libinterfaces.c: libinterfaces.a
    -
    -
    -libgst_pack_la_LDFLAGS +=  -lgstpbutils-0.10
    -nodist_libgst_pack_la_SOURCES += libpbutils.c
    -CLEANFILES += libpbutils.c
    -noinst_LIBRARIES += libpbutils.a
    -libpbutils_a_CFLAGS = $(pbutils_la_CFLAGS)
    -libpbutils_a_SOURCES = $(pbutils_la_SOURCES) $(nodist_pbutils_la_SOURCES)
    -pbutils_la_DEPENDENCIES = $(libgst_pack_lib)
    -libpbutils.c: libpbutils.a
    -
    -
    -if HAVE_GST_AUDIO
    - libgst_pack_la_LDFLAGS +=  -lgstaudio-0.10
    - nodist_libgst_pack_la_SOURCES += libaudio.c
    - CLEANFILES += libaudio.c
    - noinst_LIBRARIES += libaudio.a
    - libaudio_a_CFLAGS = $(audio_la_CFLAGS)
    - libaudio_a_SOURCES=$(audio_la_SOURCES) $(nodist_audio_la_SOURCES)
    - audio_la_DEPENDENCIES = $(libgst_pack_lib)
    -libaudio.c: libaudio.a
    -
    -
    -endif
    -
    -if HAVE_GST_VIDEO
    - libgst_pack_la_LDFLAGS += -lgstvideo-0.10
    - nodist_libgst_pack_la_SOURCES += libvideo.c
    - CLEANFILES += libvideo.c
    - noinst_LIBRARIES += libvideo.a
    - libvideo_a_CFLAGS = $(video_la_CFLAGS)
    - libvideo_a_SOURCES=$(video_la_SOURCES) $(nodist_video_la_SOURCES)
    - video_la_DEPENDENCIES = $(libgst_pack_lib)
    -libvideo.c: libvideo.a
    -
    -
    -endif
    -
    -if HAVE_GST_TAG
    - libgst_pack_la_LDFLAGS += -lgsttag-0.10
    - nodist_libgst_pack_la_SOURCES += libtag.c
    - CLEANFILES += libtag.c
    - noinst_LIBRARIES += libtag.a
    - libtag_a_CFLAGS = $(tag_la_CFLAGS)
    - libtag_a_SOURCES = $(tag_la_SOURCES) $(nodist_tag_la_SOURCES)
    - tag_la_DEPENDENCIES = $(libgst_pack_lib)
    -libtag.c: libtag.a
    -
    -endif
    -
    -.a.c:
    -	/bin/sh $(top_srcdir)/codegen/gen_imp_code.sh $< > $<.imp		
    -	&& $(PYTHON) $(top_srcdir)/codegen/gen_gst_import_code.py $<.imp $@	
    -	&& rm -f $<.imp
     
     .defs.c: 
     	$(AM_V_GEN)($(PYTHON) $(top_srcdir)/codegen/codegen.py 
    diff -Nur gst-python-0.10.22_test/gst/Makefile_static.am gst-python-0.10.22/gst/Makefile_static.am
    --- gst-python-0.10.22_test/gst/Makefile_static.am	2015-01-19 04:20:32.000000000 +0800
    +++ gst-python-0.10.22/gst/Makefile_static.am	1970-01-01 08:00:00.000000000 +0800
    @@ -1,92 +0,0 @@
    -
    -libgst_pack_lib = libgst_pack.la
    -pygstexec_LTLIBRARIES += $(libgst_pack_lib)
    -libgst_pack_la_SOURCES = gst_static_plugin_reg.c
    -
    -libgst_pack_la_CFLAGS = $(common_cflags) -fPIC
    -libgst_pack_la_LIBADD = $(common_libadd) $(GST_BASE_LIBS)
    -libgst_pack_la_LDFLAGS = -shared -fPIC $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_NET_LIBS) $(GST_DP_LIBS)
    -nodist_libgst_pack_la_SOURCES = lib_gst.c
    -CLEANFILES += lib_gst.c
    -noinst_LIBRARIES = lib_gst.a
    -lib_gst_a_CFLAGS = $(_gst_la_CFLAGS)
    -lib_gst_a_SOURCES = $(_gst_la_SOURCES) $(nodist__gst_la_SOURCES)
    -_gst_la_DEPENDENCIES = $(libgst_pack_lib)
    -lib_gst.c: lib_gst.a
    -
    -
    -if HAVE_PYGOBJECT_2_16
    -libgst_pack_la_LDFLAGS += $(GST_LIBS) $(GST_OPTION_LIBS)
    -nodist_libgst_pack_la_SOURCES += libgstoption.c
    -CLEANFILES += libgstoption.c
    -noinst_LIBRARIES += libgstoption.a
    -libgstoption_a_CFLAGS = $(common_cflags)
    -libgstoption_a_SOURCES = ../gstoptionmodule.c
    -libgstoption.c: libgstoption.a
    -
    -
    -endif
    -
    -libgst_pack_la_LDFLAGS += $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-$(GST_MAJORMINOR) 
    -nodist_libgst_pack_la_SOURCES += libinterfaces.c
    -CLEANFILES += libinterfaces.c
    -noinst_LIBRARIES += libinterfaces.a
    -libinterfaces_a_CFLAGS = $(interfaces_la_CFLAGS)
    -libinterfaces_a_SOURCES = $(interfaces_la_SOURCES) $(nodist_interfaces_la_SOURCES)
    -interfaces_la_DEPENDENCIES = $(libgst_pack_lib)
    -libinterfaces.c: libinterfaces.a
    -
    -
    -libgst_pack_la_LDFLAGS +=  -lgstpbutils-0.10
    -nodist_libgst_pack_la_SOURCES += libpbutils.c
    -CLEANFILES += libpbutils.c
    -noinst_LIBRARIES += libpbutils.a
    -libpbutils_a_CFLAGS = $(pbutils_la_CFLAGS)
    -libpbutils_a_SOURCES = $(pbutils_la_SOURCES) $(nodist_pbutils_la_SOURCES)
    -pbutils_la_DEPENDENCIES = $(libgst_pack_lib)
    -libpbutils.c: libpbutils.a
    -
    -
    -if HAVE_GST_AUDIO
    - libgst_pack_la_LDFLAGS +=  -lgstaudio-0.10
    - nodist_libgst_pack_la_SOURCES += libaudio.c
    - CLEANFILES += libaudio.c
    - noinst_LIBRARIES += libaudio.a
    - libaudio_a_CFLAGS = $(audio_la_CFLAGS)
    - libaudio_a_SOURCES=$(audio_la_SOURCES) $(nodist_audio_la_SOURCES)
    - audio_la_DEPENDENCIES = $(libgst_pack_lib)
    -libaudio.c: libaudio.a
    -
    -
    -endif
    -
    -if HAVE_GST_VIDEO
    - libgst_pack_la_LDFLAGS += -lgstvideo-0.10
    - nodist_libgst_pack_la_SOURCES += libvideo.c
    - CLEANFILES += libvideo.c
    - noinst_LIBRARIES += libvideo.a
    - libvideo_a_CFLAGS = $(video_la_CFLAGS)
    - libvideo_a_SOURCES=$(video_la_SOURCES) $(nodist_video_la_SOURCES)
    - video_la_DEPENDENCIES = $(libgst_pack_lib)
    -libvideo.c: libvideo.a
    -
    -
    -endif
    -
    -if HAVE_GST_TAG
    - libgst_pack_la_LDFLAGS += -lgsttag-0.10
    - nodist_libgst_pack_la_SOURCES += libtag.c
    - CLEANFILES += libtag.c
    - noinst_LIBRARIES += libtag.a
    - libtag_a_CFLAGS = $(tag_la_CFLAGS)
    - libtag_a_SOURCES = $(tag_la_SOURCES) $(nodist_tag_la_SOURCES)
    - tag_la_DEPENDENCIES = $(libgst_pack_lib)
    -libtag.c: libtag.a
    -
    -endif
    -
    -.a.c:
    -	/bin/sh $(top_srcdir)/codegen/gen_imp_code.sh $< > $<.imp		
    -	&& $(PYTHON) $(top_srcdir)/codegen/gen_gst_import_code.py $<.imp $@	
    -	&& rm -f $<.imp
    -
    diff -Nur gst-python-0.10.22_test/Makefile.am gst-python-0.10.22/Makefile.am
    --- gst-python-0.10.22_test/Makefile.am	2015-01-19 04:53:18.269354984 +0800
    +++ gst-python-0.10.22/Makefile.am	2010-11-20 02:44:51.000000000 +0800
    @@ -1,8 +1,8 @@
     SUBDIRS = common codegen gst examples plugin testsuite pkgconfig
     
     common_cflags = $(PYTHON_INCLUDES) $(PYGOBJECT_CFLAGS) $(GST_CFLAGS) $(GST_OPTION_CFLAGS) -fno-strict-aliasing
    -common_libadd =
    -common_ldflags = -module -avoid-version -Wl,--rpath,. -L./gst/.libs/ -lgst_pack
    +common_libadd = $(GST_LIBS) $(GST_OPTION_LIBS)
    +common_ldflags = -module -avoid-version
     
     # include before EXTRA_DIST for win32 assignment
     include $(top_srcdir)/common/win32.mak
    @@ -22,10 +22,6 @@
     	-export-symbols-regex "^(initgstoption|_PyGObject_API).*"
     gstoption_la_SOURCES = gstoptionmodule.c
     
    -if HAVE_PYGOBJECT_2_16
    -gstoption_la_DEPENDENCIES = gst/libgst_pack.la
    -endif
    -
     EXTRA_DIST = 
     	gstlibtoolimporter.py 
     	pygst.py.in 
    diff -Nur gst-python-0.10.22_test/win32/common/config.h gst-python-0.10.22/win32/common/config.h
    --- gst-python-0.10.22_test/win32/common/config.h	1970-01-01 08:00:00.000000000 +0800
    +++ gst-python-0.10.22/win32/common/config.h	2011-10-30 00:06:10.000000000 +0800
    @@ -0,0 +1,88 @@
    +/* config.h.in.  Generated from configure.ac by autoheader.  */
    +
    +/* Defined if gcov is enabled to force a rebuild due to config.h changing */
    +#undef GST_GCOV_ENABLED
    +
    +/* Define to 1 if you have the <dlfcn.h> header file. */
    +#undef HAVE_DLFCN_H
    +
    +/* Define to 1 if you have the <inttypes.h> header file. */
    +#undef HAVE_INTTYPES_H
    +
    +/* Define to 1 if you have the <memory.h> header file. */
    +#undef HAVE_MEMORY_H
    +
    +/* We can use the plugins-install methods */
    +#define HAVE_PLUGINS_INSTALL 1
    +
    +/* Defined if we have a 2.12 series pygobject */
    +#undef HAVE_PYGOBJECT_2_12
    +
    +/* Defined if we have a 2.16 series pygobject */
    +#undef HAVE_PYGOBJECT_2_16
    +
    +/* Define to 1 if you have the <stdint.h> header file. */
    +#undef HAVE_STDINT_H
    +
    +/* Define to 1 if you have the <stdlib.h> header file. */
    +#undef HAVE_STDLIB_H
    +
    +/* Define to 1 if you have the <strings.h> header file. */
    +#undef HAVE_STRINGS_H
    +
    +/* Define to 1 if you have the <string.h> header file. */
    +#undef HAVE_STRING_H
    +
    +/* Define to 1 if you have the <sys/stat.h> header file. */
    +#undef HAVE_SYS_STAT_H
    +
    +/* Define to 1 if you have the <sys/types.h> header file. */
    +#undef HAVE_SYS_TYPES_H
    +
    +/* Define to 1 if you have the <unistd.h> header file. */
    +#undef HAVE_UNISTD_H
    +
    +/* Define if valgrind should be used */
    +#undef HAVE_VALGRIND
    +
    +/* We can use the videoorientation interface */
    +#define HAVE_VIDEO_ORIENTATION_INTERFACE 1
    +
    +/* Define to 1 if your C compiler doesn't accept -c and -o together. */
    +#undef NO_MINUS_C_MINUS_O
    +
    +/* Name of package */
    +#define PACKAGE "gst-python"
    +
    +/* Define to the address where bug reports for this package should be sent. */
    +#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer"
    +
    +/* Define to the full name of this package. */
    +#define PACKAGE_NAME "GStreamer Python Bindings"
    +
    +/* Define to the full name and version of this package. */
    +#define PACKAGE_STRING "GStreamer Python Bindings 0.10.22"
    +
    +/* Define to the one symbol short name of this package. */
    +#define PACKAGE_TARNAME "gst-python"
    +
    +/* Define to the version of this package. */
    +#define PACKAGE_VERSION "0.10.22"
    +
    +/* PyGst major version */
    +#define PYGST_MAJOR_VERSION 0
    +
    +/* PyGst micro version */
    +#define PYGST_MICRO_VERSION 22
    +
    +/* PyGst minor version */
    +#define PYGST_MINOR_VERSION 10
    +
    +/* PyGst nano version */
    +#define PYGST_NANO_VERSION 0
    +
    +/* Define to 1 if you have the ANSI C header files. */
    +#undef STDC_HEADERS
    +
    +/* Version number of package */
    +#define VERSION "0.10.22"
    
  • 相关阅读:
    33.数组声明方式(var构造函数) 、检测数组类型、数组的属性(封装好的就一个length)、数组的方法
    31.this指向(写出调用链,找最近对象) this的默认绑定 隐式绑定 显示绑定(call(绑定对象) apply(绑定对象) 当括号内没放绑定对象的时候恢复默认绑定) bind
    31.
    30.函数作用域链 (GO AO 也叫词法作用域链)、 调用栈、调用栈涉及this绑定
    29.包装类(构造函数) 包装类作用及调用栈
    916. Word Subsets
    246. Strobogrammatic Number
    445. Add Two Numbers II
    2. Add Two Numbers
    341. Flatten Nested List Iterator
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/4232295.html
Copyright © 2011-2022 走看看