2015年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 $@  && 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 \

 

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 ();\n" % line[:-1])
-        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_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"

 

rm -f libQt5Qml.so.5.4.0 libQt5Qml.so libQt5Qml.so.5 libQt5Qml.so.5.4
g++ -Wl,-O1,--sort-common,--as-needed,-z,relro -Wl,--no-undefined -Wl,-O1 -fuse-ld=gold -shared -Wl,-Bsymbolic-functions -Wl,-soname,libQt5Qml.so.5 -o libQt5Qml.so.5.4.0 .obj/qqmlchangeset.o .obj/qqmllistaccessor.o .obj/qqmllistcompositor.o .obj/qqmladaptormodel.o .obj/qqmlpropertymap.o .obj/qqmljsast.o .obj/qqmljsastvisitor.o .obj/qqmljsengine_p.o .obj/qqmljsgrammar.o .obj/qqmljslexer.o .obj/qqmljsparser.o .obj/qv4compileddata.o .obj/qv4compiler.o .obj/qv4codegen.o .obj/qv4isel_p.o .obj/qv4jsir.o .obj/qv4ssa.o .obj/qqmlirbuilder.o .obj/qqmltypecompiler.o .obj/qv4instr_moth.o .obj/qv4isel_moth.o .obj/qjsengine.o .obj/qjsvalue.o .obj/qjsvalueiterator.o .obj/qv4assembler.o .obj/qv4regalloc.o .obj/qv4isel_masm.o .obj/qv4binop.o .obj/qv4unop.o .obj/ARMv7Assembler.o .obj/LinkBuffer.o .obj/PrintStream.o .obj/FilePrintStream.o .obj/OSAllocatorPosix.o .obj/PageAllocationAligned.o .obj/PageBlock.o .obj/WTFStubs.o .obj/Options.o .obj/Disassembler.o .obj/UDis86Disassembler.o .obj/ARMv7Disassembler.o .obj/ARMv7DOpcode.o .obj/YarrCanonicalizeUCS2.o .obj/YarrInterpreter.o .obj/YarrJIT.o .obj/YarrPattern.o .obj/YarrSyntaxChecker.o .obj/qv4engine.o .obj/qv4context.o .obj/qv4persistent.o .obj/qv4debugging.o .obj/qv4lookup.o .obj/qv4identifier.o .obj/qv4identifiertable.o .obj/qv4mm.o .obj/qv4managed.o .obj/qv4internalclass.o .obj/qv4sparsearray.o .obj/qv4arraydata.o .obj/qv4arrayobject.o .obj/qv4argumentsobject.o .obj/qv4booleanobject.o .obj/qv4dateobject.o .obj/qv4errorobject.o .obj/qv4function.o .obj/qv4functionobject.o .obj/qv4globalobject.o .obj/qv4jsonobject.o .obj/qv4mathobject.o .obj/qv4memberdata.o .obj/qv4numberobject.o .obj/qv4object.o .obj/qv4objectproto.o .obj/qv4regexpobject.o .obj/qv4stringobject.o .obj/qv4variantobject.o .obj/qv4objectiterator.o .obj/qv4regexp.o .obj/qv4serialize.o .obj/qv4script.o .obj/qv4executableallocator.o .obj/qv4sequenceobject.o .obj/qv4include.o .obj/qv4qobjectwrapper.o .obj/qv4qmlextensions.o .obj/qv4vme_moth.o .obj/qv4profiling.o .obj/qv4runtime.o .obj/qv4string.o .obj/qv4value.o .obj/bignum.o .obj/bignum-dtoa.o .obj/cached-powers.o .obj/diy-fp.o .obj/double-conversion.o .obj/fast-dtoa.o .obj/fixed-dtoa.o .obj/strtod.o .obj/qqmldirparser.o .obj/qqmlopenmetaobject.o .obj/qqmlvmemetaobject.o .obj/qqmlengine.o .obj/qqmlexpression.o .obj/qqmlproperty.o .obj/qqmlcomponent.o .obj/qqmlincubator.o .obj/qqmlcontext.o .obj/qqmlcustomparser.o .obj/qqmlpropertyvaluesource.o .obj/qqmlpropertyvalueinterceptor.o .obj/qqmlproxymetaobject.o .obj/qqmlvme.o .obj/qqmlcompileddata.o .obj/qqmlboundsignal.o .obj/qqmlmetatype.o .obj/qqmlstringconverters.o .obj/qqmlparserstatus.o .obj/qqmltypeloader.o .obj/qqmlinfo.o .obj/qqmlerror.o .obj/qqmlvaluetype.o .obj/qqmlaccessors.o .obj/qqmlxmlhttprequest.o .obj/qqmlwatcher.o .obj/qqmlcleanup.o .obj/qqmlpropertycache.o .obj/qqmlnotifier.o .obj/qqmltypenotavailable.o .obj/qqmltypenamecache.o .obj/qqmlscriptstring.o .obj/qqmlnetworkaccessmanagerfactory.o .obj/qqmlextensionplugin.o .obj/qqmlimport.o .obj/qqmllist.o .obj/qqmllocale.o .obj/qqmlabstractexpression.o .obj/qqmljavascriptexpression.o .obj/qqmlabstractbinding.o .obj/qqmlvaluetypeproxybinding.o .obj/qqmlglobal.o .obj/qqmlfile.o .obj/qqmlbundle.o .obj/qqmlmemoryprofiler.o .obj/qqmlplatform.o .obj/qqmlbinding.o .obj/qqmlabstracturlinterceptor.o .obj/qqmlapplicationengine.o .obj/qqmllistwrapper.o .obj/qqmlcontextwrapper.o .obj/qqmlvaluetypewrapper.o .obj/qqmltypewrapper.o .obj/qqmlfileselector.o .obj/qqmlobjectcreator.o .obj/qintrusivelist.o .obj/qhashedstring.o .obj/qqmlpool.o .obj/qqmlthread.o .obj/qqmltrace.o .obj/qv8engine.o .obj/qv4domerrors.o .obj/qv4sqlerrors.o .obj/qqmlbuiltinfunctions.o .obj/qqmldebugservice.o .obj/qqmlprofilerservice.o .obj/qqmldebugserver.o .obj/qqmlinspectorservice.o .obj/qqmlenginedebugservice.o .obj/qdebugmessageservice.o .obj/qv4debugservice.o .obj/qqmlconfigurabledebugservice.o .obj/qqmlenginecontrolservice.o .obj/qqmlabstractprofileradapter.o .obj/qv4profileradapter.o .obj/qqmlprofiler.o .obj/qabstractanimationjob.o .obj/qanimationgroupjob.o .obj/qsequentialanimationgroupjob.o .obj/qparallelanimationgroupjob.o .obj/qcontinuinganimationgroupjob.o .obj/qpauseanimationjob.o .obj/qqmlbind.o .obj/qqmlconnections.o .obj/qqmldelegatemodel.o .obj/qqmllistmodel.o .obj/qqmllistmodelworkeragent.o .obj/qqmlmodelsmodule.o .obj/qqmlobjectmodel.o .obj/qqmltimer.o .obj/qquickpackage.o .obj/qquickworkerscript.o .obj/qqmlinstantiator.o .obj/moc_qqmlpropertymap.o .obj/moc_qv4debugging_p.o .obj/moc_qv4include_p.o .obj/moc_qv4qobjectwrapper_p.o .obj/moc_qv4profiling_p.o .obj/moc_qqmlglobal_p.o .obj/moc_qqmlcomponent.o .obj/moc_qqmlengine.o .obj/moc_qqmlcontext.o .obj/moc_qqmlvaluetype_p.o .obj/moc_qqmlwatcher_p.o .obj/moc_qqmltypenotavailable_p.o .obj/moc_qqmlextensionplugin.o .obj/moc_qqmllocale_p.o .obj/moc_qqmlcomponentattached_p.o .obj/moc_qqmlplatform_p.o .obj/moc_qqmlfileselector.o .obj/moc_qqmldebugservice_p.o .obj/moc_qqmlprofilerservice_p.o .obj/moc_qqmlinspectorservice_p.o .obj/moc_qqmlenginedebugservice_p.o .obj/moc_qdebugmessageservice_p.o .obj/moc_qv4debugservice_p.o .obj/moc_qqmlconfigurabledebugservice_p.o .obj/moc_qqmlabstractprofileradapter_p.o .obj/moc_qv4profileradapter_p.o .obj/moc_qqmlprofiler_p.o .obj/moc_qabstractanimationjob_p.o .obj/moc_qqmlbind_p.o .obj/moc_qqmlconnections_p.o .obj/moc_qqmldelegatemodel_p.o .obj/moc_qqmldelegatemodel_p_p.o .obj/moc_qqmllistmodel_p.o .obj/moc_qqmllistmodel_p_p.o .obj/moc_qqmllistmodelworkeragent_p.o .obj/moc_qqmlobjectmodel_p.o .obj/moc_qqmltimer_p.o .obj/moc_qquickpackage_p.o .obj/moc_qquickworkerscript_p.o  -L/home/eaglexmw/x32/qt5/src/qt-everywhere-opensource-src-5.4.0/qtbase/lib -lQt5Network -lQt5Core -lpthread -lrt
.obj/YarrInterpreter.o:YarrInterpreter.cpp:function JSC::Yarr::byteCompile(JSC::Yarr::YarrPattern&, WTF::BumpPointerAllocator*): error: undefined reference to 'JSC::Yarr::wordcharCreate()'
.obj/YarrInterpreter.o:YarrInterpreter.cpp:function JSC::Yarr::byteCompile(JSC::Yarr::YarrPattern&, WTF::BumpPointerAllocator*): error: undefined reference to 'JSC::Yarr::newlineCreate()'
.obj/YarrJIT.o:YarrJIT.cpp:function JSC::Yarr::YarrPattern::newlineCharacterClass(): error: undefined reference to 'JSC::Yarr::newlineCreate()'
.obj/YarrJIT.o:YarrJIT.cpp:function JSC::Yarr::YarrPattern::wordcharCharacterClass(): error: undefined reference to 'JSC::Yarr::wordcharCreate()'
.obj/YarrJIT.o:YarrJIT.cpp:function JSC::Yarr::YarrGenerator<(JSC::Yarr::YarrJITCompileMode)0>::matchAssertionWordchar(unsigned int, JSC::AbstractMacroAssembler<JSC::X86Assembler>::JumpList&, JSC::AbstractMacroAssembler<JSC::X86Assembler>::JumpList&): error: undefined reference to 'JSC::Yarr::wordcharCreate()'
.obj/YarrJIT.o:YarrJIT.cpp:function JSC::Yarr::YarrGenerator<(JSC::Yarr::YarrJITCompileMode)1>::matchAssertionWordchar(unsigned int, JSC::AbstractMacroAssembler<JSC::X86Assembler>::JumpList&, JSC::AbstractMacroAssembler<JSC::X86Assembler>::JumpList&): error: undefined reference to 'JSC::Yarr::wordcharCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::YarrPatternConstructor::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::digitsCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::YarrPatternConstructor::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::spacesCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::YarrPatternConstructor::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::newlineCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions(): error: undefined reference to 'JSC::Yarr::newlineCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::nonwordcharCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::nonwordcharCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::digitsCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::spacesCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::spacesCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::digitsCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::nonspacesCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::nonspacesCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::nondigitsCreate()'
.obj/YarrPattern.o:YarrPattern.cpp:function JSC::Yarr::Parser<JSC::Yarr::YarrPatternConstructor, unsigned short>::CharacterClassParserDelegate::atomBuiltInCharacterClass(JSC::Yarr::BuiltInCharacterClassID, bool): error: undefined reference to 'JSC::Yarr::nondigitsCreate()'
collect2: 错误:ld 返回 1
Makefile:1066: recipe for target '../../lib/libQt5Qml.so.5.4.0' failed
make[3]: *** [../../lib/libQt5Qml.so.5.4.0] Error 1
make[3]: Leaving directory '/home/eaglexmw/x32/qt5/src/qt-everywhere-opensource-src-5.4.0/qtdeclarative/src/qml'
Makefile:49: recipe for target 'sub-qml-make_first-ordered' failed
make[2]: *** [sub-qml-make_first-ordered] Error 2
make[2]: Leaving directory '/home/eaglexmw/x32/qt5/src/qt-everywhere-opensource-src-5.4.0/qtdeclarative/src'
Makefile:45: recipe for target 'sub-src-make_first' failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory '/home/eaglexmw/x32/qt5/src/qt-everywhere-opensource-src-5.4.0/qtdeclarative'
Makefile:222: recipe for target 'module-qtdeclarative-make_first' failed
make: *** [module-qtdeclarative-make_first] Error 2
[eaglexmw@Xiaomw qt-everywhere-opensource-src-5.4.0]$