Xpra-org / xpra

Persistent remote applications for X11; screen sharing for X11, MacOS and MSWindows.
https://xpra.org/
GNU General Public License v2.0
1.96k stars 169 forks source link

csc_swscale import fails, undefine symbol: av_px_fmt_desc_get #594

Closed totaam closed 10 years ago

totaam commented 10 years ago

Issue migrated from trac ticket # 594

component: client | priority: major | resolution: fixed

2014-06-11 19:38:43: pyther created the issue


$ xpra attach blah

2014-06-11 14:28:20,626  cannot import csc_swscale (swscale colorspace conversion): /usr/lib/python2.6/site-packages/xpra/codecs/csc_swscale/colorspace_converter.so: undefined symbol: av_pix_fmt_desc_get

As you can see colorspace_converter.so is not linked to any libraries.

$ ldd /usr/lib/python2.6/site-packages/xpra/codecs/csc_swscale/colorspace_converter.so
  linux-vdso.so.1 =>  (0x00007fffa97ff000)
  libpython2.6.so.1.0 => /usr/lib64/libpython2.6.so.1.0 (0x00007f87b3e99000)
  libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87b3c7c000)
  libc.so.6 => /lib64/libc.so.6 (0x00007f87b38e7000)
  libdl.so.2 => /lib64/libdl.so.2 (0x00007f87b36e3000)
  libutil.so.1 => /lib64/libutil.so.1 (0x00007f87b34e0000)
  libm.so.6 => /lib64/libm.so.6 (0x00007f87b325b000)
  /lib64/ld-linux-x86-64.so.2 (0x0000003ad8600000)

This happens with RHEL/CentOS packages that you provide. I also compiled against the newest x264, libavc, and ffmpeg using the provided spec without any resolution.

Build Procedures I used for x264, libvpx, and ffmpeg. I used Cython 0.20.1.

$ wget https://webm.googlecode.com/files/libvpx-v1.3.0.tar.bz2
$ cd libvpx-v1.3.0
$ ./configure --enable-pic --disable-install-docs  --enable-shared --enable-static --enable-vp8 --enable-realtime-only --enable-onthefly-bitpacking --enable-runtime-cpu-detect
$ make -j5
$ make install
$ wget https://libav.org/releases/libav-9.13.tar.xz
$ tar -xvf libav-9.13.tar.xz
$ ./configure --enable-runtime-cpudetect --enable-static --enable-shared --disable-avdevice  --enable-pic
$ make -j5
$ make install
$ wget http://ftp.videolan.org/pub/x264/snapshots/x264-snapshot-20140610-2245-stable.tar.bz2
$ ./configure --enable-shared --enable-static
$ make -j5
$ wget http://www.ffmpeg.org/releases/ffmpeg-2.2.3.tar.bz2
$ cd ffmpeg-2.2.3
$ ./configure --enable-static --enable-shared --disable-debug  --enable-gpl \
  --enable-runtime-cpudetect  --disable-doc  --disable-ffplay --disable-ffprobe \
  --disable-ffserver --disable-vaapi --disable-vdpau  --disable-everything \
  --enable-decoder=h264 --enable-memalign-hack --disable-symver
$ make -j5
$ make install

Full xpra output (other errors are probably unrelated)

$ xpra attach blah
2014-06-11 14:28:20,626  cannot import csc_swscale (swscale colorspace conversion): /usr/lib/python2.6/site-packages/xpra/codecs/csc_swscale/colorspace_converter.so: undefined symbol: av_pix_fmt_desc_get
2014-06-11 14:28:20,641  cannot import csc_opencl (OpenCL colorspace conversion): No module named pyopencl
2014-06-11 14:28:20,698  cannot import enc_webm (webp encoder): Could not find webp library from ['libwebp.so.5', 'libwebp.so.4']
2014-06-11 14:28:20,698  cannot import dec_webm (webp encoder): Could not find webp library from ['libwebp.so.5', 'libwebp.so.4']
2014-06-11 14:28:21,038 xpra client version 0.13.5
2014-06-11 14:28:21,362 csc module csc_swscale could not be loaded: /usr/lib/python2.6/site-packages/xpra/codecs/csc_swscale/colorspace_converter.so: undefined symbol: av_pix_fmt_desc_get
2014-06-11 14:28:24,254 OpenGL support not enabled: unable to query max texture size: cannot import name GL_MAX_RECTANGLE_TEXTURE_SIZE
Usage: 
  xpra start DISPLAY
  xpra stop [DISPLAY]
  xpra exit [DISPLAY]
  xpra list
  xpra upgrade DISPLAY
  xpra attach [DISPLAY]
  xpra detach [DISPLAY]
  xpra screenshot filename [DISPLAY]
  xpra info [DISPLAY]
  xpra control DISPLAY command [arg1] [arg2]..
  xpra version [DISPLAY]
  xpra shadow [DISPLAY]

xpra: error: unknown format for display name: blah
totaam commented 10 years ago

2014-06-12 02:23:42: pyther commented


I did some more testing and refined my build process. I discovered libav was unnecessary and actually looks as if it may conflict with ffmpeg.

When dynamically linking against ffmpeg and x264 in the xpra build process, xpra starts, no errors are given, and h264 decoding works.

rpmbuild -ba SPECS/xpra.spec

When built with static linking

rpmbuild -ba SPECS/xpra.spec --define 'static_video_libs 1'

xpra gives the following error (as in the original post) and h264 encoding does not work.

2014-06-11 21:10:20,626 cannot import csc_swscale (swscale colorspace conversion): /usr/lib/python2.6/site-packages/xpra/codecs/csc_swscale/colorspace_converter.so: undefined symbol: av_pix_fmt_desc_get
$ wget  http://ftp.videolan.org/pub/x264/snapshots/x264-snapshot-20140610-2245-stable.tar.bz2
$ tar xvf 0140610-2245-stable.tar.bz2
$ cd x264-snapshot-20140610-2245-stable
$ ./configure --enable-shared --enable-static
$ make -j2
$ make install

$ wget http://www.ffmpeg.org/releases/ffmpeg-2.2.3.tar.bz2
$ tar ffmpeg-2.2.3.tar.bz2
$ cd ffmpeg-2.2.3
$ ./configure --enable-shared --enable-static --disable-debug --enable-gpl  --enable-runtime-cpudetect --disable-doc --disable-ffplay --disable-ffprobe --disable-ffserver --disable-vaapi --disable-vdpau --disable-everything --enable-decoder=h264 --enable-memalign-hack --disable-symver
$ make -j2
$ make install

$ wget http://cython.org/release/Cython-0.20.1.tar.gz
$ tar xvf Cython-0.20.1.tar.gz

in the %build and %install sections I added
export PYTHONPATH=/home/pyther/Cython-0.20.1
export PATH=$PATH:/home/pyther/Cython-0.20.1/bin
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
totaam commented 10 years ago

2014-06-12 03:00:53: totaam changed status from new to assigned

totaam commented 10 years ago

2014-06-12 03:00:53: totaam changed owner from antoine to totaam

totaam commented 10 years ago

2014-06-12 03:00:53: totaam edited the issue description

totaam commented 10 years ago

2014-06-12 03:00:53: totaam commented


OK, so it looks like I just need to not build it statically linked. I believe that's the case for centos 6.4 onwards?

As you may have already found out, don't mix libav and ffmpeg. Only ffmpeg is really supported.

totaam commented 10 years ago

2014-06-12 03:36:47: pyther commented


Not building statically would work. However, you would need to include a ffmpeg and x264 rpm. How do you feel about that?

$ pwd
/usr/lib/python2.6/site-packages/xpra
$ find . -name '*.so' -exec ldd {} \; | grep 'not found'
  libvpx.so.1 => not found
  libvpx.so.1 => not found
  libswscale.so.2 => not found
  libavcodec.so.55 => not found
  libavutil.so.52 => not found
$ LD_LIBRARY_PATH='/usr/local/lib' find . -name '*.so' -exec ldd {} \; | grep 'not found'

I installed x264 and ffmpeg in /usr/local

Sort of unrelated, I would like to help improve the spec file and get xpra to build in a clean mock environment.

totaam commented 10 years ago

2014-06-12 04:04:23: totaam commented


Wait, I thought that there were repositories or packages for ffmpeg already somewhere (dag? rpmfusion?)

If not, then we have to use static linking (and fix that).

As for improving the spec file, by all means - that would be great as this is badly needed... (as long as it doesn't break my builtbot too badly..)

totaam commented 10 years ago

2014-06-12 09:28:57: totaam changed status from assigned to new

totaam commented 10 years ago

2014-06-12 09:28:57: totaam changed owner from totaam to pyther

totaam commented 10 years ago

2014-06-12 09:28:57: totaam commented


I believe that the fix for this problem is r6744. The backport for v0.13.x is in 6745.

This seems to work for me, can I close this ticket?

totaam commented 10 years ago

2014-06-12 14:08:28: pyther changed status from new to closed

totaam commented 10 years ago

2014-06-12 14:08:28: pyther changed resolution from * to fixed*

totaam commented 10 years ago

2014-06-12 14:08:28: pyther commented


Built against the latest svn checkout and this error issue is resolved. There are a few other build issues - I think, but I will open up separate tickets.