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

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

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

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

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

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

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

新增加了安装gst_pack动态库的代码

diff -Nur gst-python-0.10.22/codegen/gen_gst_import_code.py gst-python-0.10.22_test/codegen/gen_gst_import_code.py
--- gst-python-0.10.22/codegen/gen_gst_import_code.py 1970-01-01 08:00:00.000000000 +0800
+++ gst-python-0.10.22_test/codegen/gen_gst_import_code.py 2015-01-20 05:12:45.107817971 +0800
@@ -0,0 +1,33 @@
+import os,sys,random
+
+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 ();\n" % line[:-1])
+ d_handle.write("\nvoid __gst_import_%s ()\n{\n" % random.randint(0,10000) )
+ #d_handle.write("\nstatic void __gst_import_functions ()\n{\n")
+ for line in s_buff:
+ d_handle.write(" %s ();\n" % line[:-1])
+ d_handle.write("}\n\n")
+ 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/codegen/gen_imp_code.sh gst-python-0.10.22_test/codegen/gen_imp_code.sh
--- gst-python-0.10.22/codegen/gen_imp_code.sh 1970-01-01 08:00:00.000000000 +0800
+++ gst-python-0.10.22_test/codegen/gen_imp_code.sh 2015-01-19 03:03:07.211836824 +0800
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+nm -g $1 | grep " U " | awk "{ print \$2}" | grep "^gst_"
+
diff -Nur gst-python-0.10.22/gst/gst_static_plugin_reg.c gst-python-0.10.22_test/gst/gst_static_plugin_reg.c
--- gst-python-0.10.22/gst/gst_static_plugin_reg.c 1970-01-01 08:00:00.000000000 +0800
+++ gst-python-0.10.22_test/gst/gst_static_plugin_reg.c 2015-01-18 23:20:09.490976826 +0800
@@ -0,0 +1,4 @@
+
+void init_register_static_gst_plugin()
+{
+}
diff -Nur gst-python-0.10.22/gst/Makefile.am gst-python-0.10.22_test/gst/Makefile.am
--- gst-python-0.10.22/gst/Makefile.am 2011-10-20 20:31:28.000000000 +0800
+++ gst-python-0.10.22_test/gst/Makefile.am 2015-01-21 06:17:45.551271251 +0800
@@ -53,9 +53,9 @@ # GStreamer bindings
_gst_la_CFLAGS = $(common_cflags)
-_gst_la_LIBADD = $(common_libadd) $(GST_BASE_LIBS)
+_gst_la_LIBADD = $(common_libadd)
_gst_la_LDFLAGS = $(common_ldflags) -export-symbols-regex "^(init_gst|_PyGObject_API|pygstminiobject_).*" \
- $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) $(GST_NET_LIBS) $(GST_DP_LIBS)
+ -lgst_pack
_gst_la_SOURCES = \
gst-argtypes.c \
gstmodule.c \
@@ -92,7 +92,7 @@
interfaces_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS)
interfaces_la_LIBADD = $(common_libadd) -lgstinterfaces-$(GST_MAJORMINOR)
interfaces_la_LDFLAGS = $(common_ldflags) \
- -export-symbols-regex "^(initinterface|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
+ -export-symbols-regex "^(initinterface|_PyGObject_API).*" -lgst_pack
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) $(GST_PLUGINS_BASE_LIBS) -lgstpbutils-0.10
+pbutils_la_LIBADD = $(common_libadd) -lgst_pack
pbutils_la_LDFLAGS = $(common_ldflags) \
- -export-symbols-regex "^(initpbutils|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
+ -export-symbols-regex "^(initpbutils|_PyGObject_API).*" -lgst_pack
pbutils_la_SOURCES = pbutilsmodule.c gst-argtypes.c
nodist_pbutils_la_SOURCES = pbutils.c
PBUTILS_OVERRIDES = pbutils.override
@@ -129,7 +129,7 @@
audio_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS)
audio_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstaudio-0.10
audio_la_LDFLAGS = $(common_ldflags) \
- -export-symbols-regex "^(initaudio|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
+ -export-symbols-regex "^(initaudio|_PyGObject_API).*" -lgst_pack
audio_la_SOURCES = audiomodule.c gst-argtypes.c
nodist_audio_la_SOURCES = audio.c
audio.c: $(AUDIO_DEFS) $(AUDIO_OVERRIDES) $(GEN_FILES)
@@ -151,7 +151,7 @@
video_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS)
video_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10
video_la_LDFLAGS = $(common_ldflags) \
- -export-symbols-regex "^(initvideo|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
+ -export-symbols-regex "^(initvideo|_PyGObject_API).*" -lgst_pack
video_la_SOURCES = videomodule.c gst-argtypes.c
nodist_video_la_SOURCES = video.c
video.c: $(VIDEO_DEFS) $(VIDEO_OVERRIDES) $(GEN_FILES)
@@ -173,13 +173,108 @@
tag_la_CFLAGS = $(common_cflags) $(GST_PLUGINS_BASE_CFLAGS)
tag_la_LIBADD = $(common_libadd) $(GST_PLUGINS_BASE_LIBS) -lgsttag-0.10
tag_la_LDFLAGS = $(common_ldflags) \
- -export-symbols-regex "^(inittag|_PyGObject_API).*" $(GST_PLUGINS_BASE_LIBS)
+ -export-symbols-regex "^(inittag|_PyGObject_API).*" -lgst_pack
tag_la_SOURCES = tagmodule.c gst-argtypes.c
nodist_tag_la_SOURCES = tag.c
tag.c: $(TAG_DEFS) $(TAG_OVERRIDES) $(GEN_FILES) endif +gstpackexecdir = /usr/lib
+gstpackexec_LTLIBRARIES = libgst_pack.la
+pygstexec_LTLIBRARIES: gstpackexec_LTLIBRARIES
+
+libgst_pack_lib = libgst_pack.la
+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_import.c
+CLEANFILES += lib_gst_import.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_import.c: lib_gst.a
+
+
+if HAVE_PYGOBJECT_2_16
+
+libgst_pack_la_LDFLAGS += $(GST_LIBS) $(GST_OPTION_LIBS)
+nodist_libgst_pack_la_SOURCES += libgstoption_import.c
+CLEANFILES += libgstoption_import.c
+noinst_LIBRARIES += libgstoption.a
+libgstoption_a_CFLAGS = $(common_cflags)
+libgstoption_a_SOURCES = ../gstoptionmodule.c
+libgstoption_import.c: libgstoption.a
+
+endif
+
+libgst_pack_la_LDFLAGS += $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-$(GST_MAJORMINOR)
+nodist_libgst_pack_la_SOURCES += libinterfaces_import.c
+CLEANFILES += libinterfaces_import.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_import: libinterfaces.a
+
+
+libgst_pack_la_LDFLAGS += -lgstpbutils-0.10
+nodist_libgst_pack_la_SOURCES += libpbutils_import.c
+CLEANFILES += libpbutils_import.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_import.c: libpbutils.a
+
+
+if HAVE_GST_AUDIO
+
+ libgst_pack_la_LDFLAGS += -lgstaudio-0.10
+ nodist_libgst_pack_la_SOURCES += libaudio_import.c
+ CLEANFILES += libaudio_import.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_import.c: libaudio.a
+
+
+endif
+
+if HAVE_GST_VIDEO
+
+ libgst_pack_la_LDFLAGS += -lgstvideo-0.10
+ nodist_libgst_pack_la_SOURCES += libvideo_import.c
+ CLEANFILES += libvideo_import.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_import.c: libvideo.a
+
+
+endif
+
+if HAVE_GST_TAG
+
+ libgst_pack_la_LDFLAGS += -lgsttag-0.10
+ nodist_libgst_pack_la_SOURCES += libtag_import.c
+ CLEANFILES += libtag_import.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_import.c: libtag.a
+
+endif
+
+%_import.c: %.a
+ /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/gst/Makefile_static.am gst-python-0.10.22_test/gst/Makefile_static.am
--- gst-python-0.10.22/gst/Makefile_static.am 1970-01-01 08:00:00.000000000 +0800
+++ gst-python-0.10.22_test/gst/Makefile_static.am 2015-01-19 04:20:32.000000000 +0800
@@ -0,0 +1,92 @@
+
+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/gst-python.spec gst-python-0.10.22_test/gst-python.spec
--- gst-python-0.10.22/gst-python.spec 2011-10-30 00:06:10.000000000 +0800
+++ gst-python-0.10.22_test/gst-python.spec 1970-01-01 08:00:00.000000000 +0800
@@ -1,100 +0,0 @@
-%define majorminor 0.10
-%define gstreamer gstreamer
-%define _pygtk 2.6.3
-%define _gst 0.10.20
-
-Name: %{gstreamer}-python
-Version: 0.10.22
-Release: 1
-Summary: Python bindings for GStreamer.
-
-Group: Development/Languages
-License: LGPL
-URL: http://gstreamer.freedesktop.org/
-Source: http://gstreamer.freedesktop.org/src/gst-python/gst-python-%{version}.tar.gz
-
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-
-Requires: python >= 2
-Requires: gnome-python2
-Requires: pygtk2 >= %_pygtk
-Requires: %{gstreamer}
-Requires: %{gstreamer}-plugins-base
-
-BuildRequires: python >= 2
-BuildRequires: python-devel >= 2
-BuildRequires: pygtk2-devel >= %_pygtk
-BuildRequires: xmlto
-BuildRequires: links
-
-BuildRequires: %{gstreamer}-devel >= %_gst
-BuildRequires: %{gstreamer}-plugins-base-devel >= %_gst
-
-# sigh, libtool
-BuildRequires: gcc-c++
-
-%description
-This module contains a wrapper that allows GStreamer applications
-to be written in Python.
-
-%prep
-%setup -q -n gst-python-%{version}
-
-%build
-%configure
-make %{?_smp_mflags}
-
-%install
-rm -rf $RPM_BUILD_ROOT
-
-%makeinstall
-find $RPM_BUILD_ROOT -type f -name "*.la" -exec rm -f {} ';'
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root,-)
-%doc AUTHORS COPYING ChangeLog NEWS README gst-python.doap
-%dir %{_libdir}/python?.?/site-packages/gst-%{majorminor}
-%{_libdir}/python?.?/site-packages/pygst.pth
-%{_libdir}/python?.?/site-packages/pygst.py
-%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/__init__.py*
-%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/extend
-%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/_gst.so
-%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/interfaces.so
-%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/pbutils.so
-%{_libdir}/gstreamer-%{majorminor}/libgstpython.so
-%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/audio.so
-%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/tag.so
-%{_libdir}/python?.?/site-packages/gst-%{majorminor}/gst/video.so
-%{_libdir}/python?.?/site-packages/gstoption.so
-
-
-%{_datadir}/gst-python
-%{_libdir}/pkgconfig/gst-python-%{majorminor}.pc
-
-%changelog
-* Fri Dec 15 2006 Thomas Vander Stichele <thomas at apestaart dot org>
-- add doap file
-
-* Tue Dec 20 2005 Thomas Vander Stichele <thomas at apestaart dot org>
-- updated spec file
-
-* Thu Oct 06 2005 Edward Hervey < edward at fluendo dot com >
-- Updated spec file for 0.9
-
-* Fri Nov 05 2004 Christian Schaller < uraeus at gnome org >
-- Remerged spec file with cvs version
-
-* Tue Oct 12 2004 Thomas Vander Stichele <thomas at apestaart dot org>
-- 0.7.93-0.fdr.1: new upstream release
-
-* Mon Jun 21 2004 Thomas Vander Stichele <thomas at apestaart dot org>
-- 0.7.92-0.fdr.1: new upstream release
-
-* Wed Mar 31 2004 Thomas Vander Stichele <thomas at apestaart dot org>
-- 0.7.91-0.fdr.1: new upstream release
-
-* Tue Sep 02 2003 Thomas Vander Stichele <thomas at apestaart dot org>
-- 0.1.0-0.fdr.1: first fedora release
diff -Nur gst-python-0.10.22/Makefile.am gst-python-0.10.22_test/Makefile.am
--- gst-python-0.10.22/Makefile.am 2010-11-20 02:44:51.000000000 +0800
+++ gst-python-0.10.22_test/Makefile.am 2015-01-20 04:50:37.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 = $(GST_LIBS) $(GST_OPTION_LIBS)
-common_ldflags = -module -avoid-version
+common_libadd =
+common_ldflags = -module -avoid-version # include before EXTRA_DIST for win32 assignment
include $(top_srcdir)/common/win32.mak
@@ -22,6 +22,10 @@
-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 \

python2-gst0.10制作静态包的补丁 v1.1的更多相关文章

  1. python2-gst0.10制作静态包的补丁

    gst制作成了静态库,而python2的gst有多个动态库引用gst的库 因此,想了一个办法将python2所需要的gst打包成一个单独的共享库 办法就是,将python2_gst所有的.so先制作成 ...

  2. CentOS下升级python2.7.10过程记录

    1.准备好一份Python2.7.10源码包,下载地址: http://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz 2.安装Python2.7 ...

  3. 编译Python2.7.10

    为了测试 mesos,搞了一个 centos7.1,使用最小化安装,然后自己安装了 net-tools,“开发工具”集.后来想装一下 DCOS Cli工具,结果发现 python 的 pip 不可用. ...

  4. 完美:adobe premiere cs6破解版下载[序列号+汉化包+破解补丁+破解教程]

    原文地址:http://blog.sina.com.cn/s/blog_6306f2c60102f5ub.html 完美:adobe premiere cs6破解版下载,含序列号.汉化包.注册机.破解 ...

  5. 制作自己的rpm包,并为其制作patch包。

    本文分为两个部分,第一部分是制作一个简单的自己的rpm包,并安装运行它.第二部分是为其制作一个patch包,并通过spec配置文件去打补丁,安装.运行打补丁后的程序. 一.安装工具 [yh@local ...

  6. Windows7SP1补丁包(Win7补丁汇总) 32位/64位版 更新截至2016年11月

    Windows7SP1(64位)补丁包(Win7补丁汇总)更新到本月最新.包含Windows7SP1中文版所有重要补丁,可离线安装,适用于Windows 7 SP1 64位 简体中文系统.包含Inte ...

  7. 烂泥:Linux源码包制作RPM包之Apache

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 公司服务器比较多,需要把apache源码包制作成rpm包,然后放到公司内网yum源上进行下载安装.apache的rpm包安装方式比源码安装方式比较快,这能 ...

  8. INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页

    INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页 作者:xin 日期:2005-09-23 字体大小: 小 中 大   VPatch 在 INNO 中的应用. VPatch 属于专为NS ...

  9. ubuntu 制作deb 包

    ubuntu下打包制作deb安装包 http://www.th7.cn/system/lin/201406/61012.shtml   2014-06-22 20:16:45CSDN-yangbing ...

随机推荐

  1. Linux如何查看JDK的安装路径

    如何在一台Linux服务器上查找JDK的安装路径呢? 有那些方法可以查找定位JDK的安装路径?是否有一些局限性呢? 下面总结了一下如何查找JDK安装路径的方法.   1:echo $JAVA_HOME ...

  2. SQL SERVER 监控数据文件增长情况

    在项目前期评估数据库的增长情况,然后根据数据库数据量的增长情况来规划存储的分配其实是一件比较麻烦的事情.因为项目没有上线,用什么来评估数据库的数据增长情况呢? 如果手头没有实际的数据,我们只能从表的数 ...

  3. mysql-7 数据检索(5)

    联结(join) SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结就是利用SQL的SELECT能执行的最重要的操作. 例子:此例子包含两个表,一个表是vendors , ve ...

  4. spring 4.x下让http请求返回json串

    当前很多应用已经开始将响应返回为json串,所以基于springframework框架开发的服务端程序,让响应返回json字符串成为了一种常用手段. 这里介绍一下如何在spring-MVC框架下方便快 ...

  5. C++ - 静态成员函数

    c++中静态成员函数属于整个类, 而不是某个对象,因此不需要创建对象就可以访问 1.出现在类体外的函数定义不能指定关键字static:2.静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访 ...

  6. C++使用binder实例

    Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的.所以搞明白Binder的话,在很大程度上就能理解程序运行的流程. ...

  7. sqlserver如何创建镜像图文教程(转)

    由于工作中需要做SQL的镜像异地备份,以前都没有研究过,百度了一个文章记录下,方便以后查询 转载地址:http://jingyan.baidu.com/article/d5c4b52b20843fda ...

  8. 001.mysql安装(lnmp)

    mysql官方网站:http://dev.mysql.com/downloads/ Linux环境:刚安装的32位的“最小化安装“的CentOS 6.7 mysql版本:本次实验安装的是mysql5. ...

  9. javamail中的 javax.mail.AuthenticationFailedException: failed to connect

    java.lang.RuntimeException: javax.mail.AuthenticationFailedException: failed to connect javax.mail.A ...

  10. 区块链是伟大的,比特币则不然。《FinTech,金融科技时代的来临》。3星。

    本书讲技术给金融业带来的变革和可能的趋势.作者认为区块链是伟大的发明,因为他可以让金融交易免费且实时地进行.比特币则可能会被其他区块链技术取代.书中有至少一半的内容涉及到了区块链和比特币.总体评价3星 ...