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

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 [email protected]  && 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 [email protected]	+	&& 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 
时间: 2024-11-14 09:47:02

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

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

gst制作成了静态库,而python2的gst有多个动态库引用gst的库 因此,想了一个办法将python2所需要的gst打包成一个单独的共享库 办法就是,将python2_gst所有的.so先制作成.a 通过nm -g加过滤的办法得到所有链接的gst函数 将这些函数生成一个小文件,在一个静态函数中引用所有这些函数 然后,将这个小文件编译成so文件,并链接gst库,这样,python2_gst所需要的gst函数就全部链接进来了 同时,可以将gst动态插件的方式也在启动时就注册进来,那样,pyth

iOS制作静态包duplicate symbol解决办法

原文链接 http://stackoverflow.com/questions/41217839/duplicate-symbols-when-integrating-firebase-and-google-sign-in-sdks-manually-wit 制作静态包时我们很可能会引入第三方的库,这种时候很容易出现我们的静态包和主工程引入的第三方库有相同库的情况,为了解决这个问题上面链接给出了解决方案. 1.先制作一个静态包. 2.使用 lipo -info 查看这个静态包是不是fat fil

Centos7下编译安装python2.7.10

先安装必要的软件包  yum -y install openssl openssl-devel ncurses-devel.x86_64  bzip2-devel sqlite-devel python-devel zlib zlib-devel 2.下载 python2.7.10源码包 wget  mkdir -pv /usr/local/python/2.7.10/lib  tar zxvf Python-2.7.10.tgz cd Python-2.7.10/ ./configure --

编译Python2.7.10

为了测试 mesos,搞了一个 centos7.1,使用最小化安装,然后自己安装了 net-tools,"开发工具"集.后来想装一下 DCOS Cli工具,结果发现 python 的 pip 不可用. 搜了一下,发现 Centos7自动的 python 版本为2.7.5,不带 openssl 加密,而要下载的东西都是 https 的,找了好久,希望能让 pip 忽略 https 的验证无果.查到一个信息,说是2.7.9以上版本自带了 openssl 插件.好吧,试试这个吧! 1.安装一

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

原文地址:http://blog.sina.com.cn/s/blog_6306f2c60102f5ub.html 完美:adobe premiere cs6破解版下载,含序列号.汉化包.注册机.破解补丁与破解教程 adobe premiere cs6简介: Adobe出品全球顶级视频编辑创作软件Premiere Pro CS6 采用了全新的64bit技术,在加快你工作效率的同时,保持了Adobe Encore CS6一一贯的稳定性. Adobe Premiere Pro cs6属目前最高版本,

制作rpm包

生产环境配置一样,每次都需要重新编译软件包,太费时间了,制作成rpm包,搞好依赖,瞬间搞定 这里使用rpmbuild来制作rpm包 rpmbuild默认工作路径由%_topdir的宏变量来定义,这个变量在/usr/lib/rpm/macros里的定义.也可使用rpmbuild命令查 rpmbuild --showrc |grep _topdir 结果如下: -14: _builddir %{_topdir}/BUILD-14: _buildrootdir %{_topdir}/BUILDROOT

1.python环境搭建(python2.7.10+ PyCharm3.4.1+selenium)

1.下载软件并配置     (1) 需要软件:python2.7.10 和 PyCharm3.4.1,地址略,百度一大把的 (2) 安装python2.7.10 下一步一直下去,直到安装成功,我这里放在D:\Program Files\Python27 (3) 安装 PyCharm3.4.1 下一步一直下去,直到安装成功,打开后如下图: --点击configure --点击settings 点击settings,进入下图: 找到本地安装的python2.7.10中的python.exe后点击ok

手动制作rpm包

制作RPM包的过程,简单的说,就是为制作过程提供一个“工作车间”,即一个目录,里面需要包含以下几个子目录: BUILD        ————编译相关源码包时的工作目录: RPMS         ————生成的二进制格式的RPM包存放的位置: SOURCES ————程序的源码文件及其其他辅助文件的存放位置: SPCES        ————spec文件的存放位置: SRPMS      ————生成的SRC格式的RPM包存放位置: 如果用户目录主目录下没有类似目录结构,可以通过一个工具软件

CentOS 6.9编译安装Python-2.7.10

Python官网:https://www.python.org/ 一.查看CentOS版本和系统默认Python版本: # cat /etc/redhat-release # python -V 二.编译安装Python-2.7.10: 1.  安装依赖软件包及包组: # yum -y groupinstall "Development tools" # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devels