MrSynAckSter
MrSynAckSter

Reputation: 1770

Why does this VLC Media Player Build Fail?

When building VLC on Ubuntu 18 using the following configure invocation:

First I obtain the source like so:

% git clone git://git.videolan.org/vlc.git
% cd vlc
% ./bootstrap

Then I build like so:

make clean

./configure --disable-lua --disable-swscale --disable-alsa --disable-chromecast --disable-fontconfig

The build fails like so:

codec/jpeg.c: In function ‘DecodeBlock’:
codec/jpeg.c:501:16: warning: variable ‘p_row_pointers’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
     JSAMPARRAY p_row_pointers = NULL;
                ^~~~~~~~~~~~~~
  CCLD     libjpeg_plugin.la
  CC       codec/libsdl_image_plugin_la-sdl_image.lo
  CCLD     libsdl_image_plugin.la
  CC       codec/libxwd_plugin_la-xwd.lo
  CCLD     libxwd_plugin.la
  CC       codec/liblibass_plugin_la-libass.lo
  CCLD     liblibass_plugin.la
/usr/bin/ld: /root/vlc-3.0.4/contrib/x86_64-linux-gnu/lib/libfontconfig.a(fcxml.o): in function `FcConfigMessage':
/root/vlc-3.0.4/contrib/native/fontconfig/src/fcxml.c:573: undefined reference to `xmlSAX2GetLineNumber'
/usr/bin/ld: /root/vlc-3.0.4/contrib/native/fontconfig/src/fcxml.c:576: undefined reference to `xmlSAX2GetLineNumber'
/usr/bin/ld: /root/vlc-3.0.4/contrib/x86_64-linux-gnu/lib/libfontconfig.a(fcxml.o): in function `IA__FcConfigParseAndLoad':
/root/vlc-3.0.4/contrib/native/fontconfig/src/fcxml.c:3309: undefined reference to `xmlCreatePushParserCtxt'
/usr/bin/ld: /root/vlc-3.0.4/contrib/native/fontconfig/src/fcxml.c:3348: undefined reference to `xmlParseChunk'
/usr/bin/ld: /root/vlc-3.0.4/contrib/native/fontconfig/src/fcxml.c:3362: undefined reference to `xmlFreeParserCtxt'
/usr/bin/ld: /root/vlc-3.0.4/contrib/native/fontconfig/src/fcxml.c:3354: undefined reference to `xmlCtxtGetLastError'

Any ideas what I did wrong here? It seems like the module in question should fail to build in this case as I disabled fontconfig.

Libfontconfig is in fact installed:

root@fuzzbot:~/vlc-3.0.4# apt-get install libfontconfig
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'libfontconfig1' instead of 'libfontconfig'
libfontconfig1 is already the newest version (2.13.0-5ubuntu3).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@fuzzbot:~/vlc-3.0.4#

Additional ideas:

I tried in vain to find VLC's official bug tracker for this kind of thing. I found bug trackers for literally every subproject of VLC but the main project that I am trying to build. If anyone knows the proper channels to ask the VLC people about this, let me know.

Additionally if the admins feel that this question better fits on serverfault, or AskUbuntu, feel free to move it. As far as I can tell this is a little too automake specific to be serverfault's bag, and I don't think the issue is unique to Ubuntu, as the official VLC wiki specifies no specific instructions for Ubuntu.

I don't really need all the plugins for my use case. If doing any further --disables in my configure invocation will help, I'm willing to try it.

Upvotes: 3

Views: 1728

Answers (2)

minghua
minghua

Reputation: 6583

I followed your post on vlc forum to this SO post.

As people there suggested the libass is the problem, thus I added the option to disable it. Now the configuration command looks like:

./configure --disable-libass \
  --disable-lua --disable-swscale --disable-alsa --disable-chromecast --disable-fontconfig

The compilation proceeded without the previous fontconfig error. However it hits a different error:

....upnp....: undefined reference to `pthread_rwlock_wrlock'

A google search turned up another vlc forum thread. People suggesting turning off upnp. Configured it again by adding:

--disable-upnp

Then hit another error:

/libavcodec.a(fft.o): relocation R_X86_64_PC32 against symbol `ff_cos_32' can not be used when making a shared object; recompile with -fPIC

Another google search suggests to turn off chromaprint, adding yet another option:

--disable-chromaprint

Eventually it finishes with a success!

Before running the long configure command at the beginning of this post, I also tried building 3.0.7.1 but hit a problem with missing a liveMedia.hh file. In case anybody else is doing the same, here is the list of packages installed though not all of them are required since disabled a few features on the configure command line:

      apt-get install git build-essential pkg-config libtool automake autopoint gettext
      apt-get install subversion yasm cvs cmake ragel
      apt-get install gperf
      apt-get install openjdk-8-jre-headless openjdk-8-jdk-headless
      apt-get install ant
      apt-get install python3-pip
      pip3 install  meson
      apt-get install nasm
      apt-get install protobuf-c-compiler
      apt-get install protobuf-compiler
      apt-get install libpthread-stubs0-dev
      apt-get install libasound2-dev liblivemedia-dev  livemedia-utils

Summary

  1. Use the videolan unix compile wiki page as a guide for steps below.
  2. Install supporting packages as the list above shows.
  3. Run cd contrib && mkdir native && cd native && ../bootstrap && make to build libraries.
  4. Run the very long configure command:
 ./configure --disable-libass \
        --disable-lua --disable-swscale --disable-alsa --disable-chromecast --disable-fontconfig \
        --disable-upnp --disable-chromaprint
  1. Run make.

Upvotes: 1

umläute
umläute

Reputation: 31284

The errors indicates a problem with linking against "some" xml-library. most likely libxml2, which you probably have not installed. ./configure is supposed to detect any missing library and prevent your build from failing, but there might be a bug in the configure script itself.

Anyhow, since you are on a Debian-based distribution, you could simply install all the packages that are required to build the official Debian (or Ubuntu) package. (Your personal build might have additional dependencies or lack some of the dependencies of the official package, but it is usually a good starting point).

apt-get build-dep vlc

If you are getting an error like E: You must put some 'source' URIs in your sources.list then you should add deb-src entries to your apt sources-list, e.g. using

find /etc/apt/sources.list /etc/apt/sources.list.d/ \
    -type f -name "*.list" -not -name debsrc.list \
    -exec echo sed -e 's|^deb |deb-src |' {} + > /etc/apt/sources.list.d/debsrc.list

Upvotes: 2

Related Questions