ASPENSMONSTER

July 17, 2010

Compiling VLC 1.0.6 from Source on Debian Lenny 64 bit

Filed under: Uncategorized — Tags: , — aspensmonster @ 12:43 am

flattr this!

  • VLC has since updated to version 1.1.0. If you want to try out this process with the newest source, then download it here: http://sourceforge.net/projects/vlc/files/1.1.0/vlc-1.1.0.tar.bz2/download. This guide should still serve you well however. I highly doubt that there will be any serious kinks in going from 1.0.6 to 1.1.0, though I do plan on trying it out myself whenever I have more time.
  • UPDATE: I did go ahead and compile 1.1.0 from source. However, it requires a LOT more up-to-date libraries than 1.0.6 does and needed several tweaks that I had to google for. As well, I had more issues with playback, particularly with flv files (nearly HALF of them kept segfaulting VLC). In short, I’m sticking with 1.0.6 for now, even though it lacks 1.1.0′s hardware acceleration (which is still experimental as it is). I’d give it a few weeks, and then grab it from the git repository. My only other hypothesis is that my playback issues could be an issue because of an old glibc version. Seeing as hardware support is coded now, this may very well be the case.

This guide is intended as an introduction to compiling software from source, with the added benefit that the result is something very useful –an up-to-date media player– to the typical user. I have written it in a chronological form, from the moment of downloading the package up to the moment the final tests on the compiled software have been finished. In this regard, it does not follow a formula like this:

  1. # apt-get install  libdvdcss gstreamer-lame [HUGE LIST OF ALL SORTS OF WEIRD PROGRAM NAMES AND STUFF LIKE THAT HERE]
  2. $ ./configure --weird-option-one --what-is-this --what-does-this-button-do --how-do-i-shot-web [LONG LONG LIST OF CONFIGURATION OPTIONS]
  3. $ make
  4. # make install
  5. DONE.

Nobody compiles software in this manner. Very rarely does an up-to-date, complicated piece of software work out as smoothly as:

$ ./configure
$ make
# make install

As well, you don’t just magically know which packages to install and what configuration options to use. Rather, I believe that a play-by-play of my experiences compiling VLC, including all wrong turns and bad ideas, will be far more useful in helping others to understand how to properly compile software (and possibly get a better understanding of how it actually comes together).

Right. Let’s get started.

Part 0: The “/etc/apt/sources.list” file

This is my (abbreviated) sources.list file:

deb cdrom:[Debian GNU/Linux 5.0.4 _Lenny_ - Official amd64 CD Binary-1 20100131-21:33]/ lenny main

deb http://ftp.us.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.us.debian.org/debian/ lenny main contrib non-free

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

# Used for all sorts of necessary media headers and programs
deb http://www.debian-multimedia.org lenny main non-free

The key component here is the debian-multimedia repository. If you don’t already have it enabled, then do the following:

$ wget http://www.debian-multimedia.org/pool/main/d/debian-multimedia-keyring/debian-multimedia-keyring_2008.10.16_all.deb
# dpkg -i debian-multimedia-keyring_2008.10.16.deb

This downloads the keyring and installs it, permitting you to use the multimedia repository. Next, be sure to add the entry into the “/etc/apt/sources.list” as shown above and then update apt:

# apt-get update

You are now ready to get started :-)

Part 1: Downloading and Extracting the Source

VLC has since updated to version 1.1.0. If you want to try out this process with the newest source, than download it here: http://sourceforge.net/projects/vlc/files/1.1.0/vlc-1.1.0.tar.bz2/download

The source for VLC 1.0.6 is here: http://download.videolan.org/pub/videolan/vlc/1.0.6/vlc-1.0.6.tar.bz2

Download the source and then extract it to wherever directory you want. I choose to put installed software in my home directory:

preston@mymachine:~$ tar xjvf vlc-1.0.6.tar.bz2
preston@mymachine:~$ cd vlc-1.0.6

Part 2: The “./configure” Command

Introduction

Herein lies the largest part of the work. Go ahead and give the following command a whirl:

preston@PRESTON-BOX:~/vlc-1.0.6$ ./configure

Chances are, it isn’t going to finish. It will probably throw an error about not finding some library or header file. And even if it does spit out a completed configuration, it’s going to be a hallow, empty shell. DON’T compile that! The output might look something like this:

[LOTS OF STUFF ABOVE]...
checking for FREETYPE... yes
checking fontconfig/fontconfig.h usability... yes
checking fontconfig/fontconfig.h presence... yes
checking for fontconfig/fontconfig.h... yes
checking Carbon/Carbon.h usability... no
checking Carbon/Carbon.h presence... no
checking Carbon/Carbon.h... no
checking for FRIBIDI... configure: error: Package requirements (fribidi) were not met:

No package 'fribidi' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix.

Alternatively, you may set the environment variables FRIBIDI_CFLAGS and FRIBIDI_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Notice the highlighted lines that show where the error was thrown. Here, it’s telling you bluntly what package was not installed.

Or it could look something like this:

[LOTS OF STUFF ABOVE]...
checking for SWSCALE... yes
checking libswscale/swscale.h usability... yes
checking libswscale/swscale.h presence... yes
checking for libswscale/swscale.h... yes
checking for ffmpeg/swscale.h usability... no
checking for ffmpeg/swscale.h presence... no
checking for ffmpeg/swscale.h... no
checking for POSTPROC... yes
checking for libpostproc/postproc.h usability... no
checking for libpostproc/postproc.h presence... no
checking for libpostproc/postproc.h... no
checking for faad.h usability... yes
checking for faad.h presence... yes
checking for faad.h... yes
checking for faacDecOpen in -lfaad... no
checking for NeAACDecOpen in -lfaad... yes
checking for twolame.h usability... no
checking for twolame.h presence... no
checking for twolame.h... no
configure: error: cannot find development header for libtwolame...

Notice in the highlighted line that it’s not naming a package, only a development header it cannot find.

Getting a “./configure” command to “complete”

So… What do you think we’re going to do to get rid of these errors? We’re going to start installing what look like the right packages and headers ( headers are often called “development packages,” the ones that end in “-dev”). We will continue to do this until we can get a ./configure command that completes (i.e., no “errors”). However, we are NOT going to immediately jump into compiling simply because the “./configure” completes (as I will show you, soon).

I prefer using Synaptic Package Manager for this sort of thing, mainly because it has a simple search function that will usually find the right packages to install. For example, searching for package “fribidi” in Synaptic points me right to it. Install it. Now try to “./configure” again. You’ll probably find another problem, perhaps something like the second example. If that’s the case (missing a header file), then use synaptic to search for the name and install the “-dev” package. That should clear it up.

Continue to clear up these little issues. I had to install the following before I could get a configuration to complete:

  • libmad0-dev
  • libavcodec-dev (Led to MANY other packages being installed. I did not keep track of them.)
  • libavformat-dev
  • libswscale-dev
  • libpostproc-dev
  • libfribidi-dev

Hunting “WARNING” flags in a “./configure” command that “completes”

However, while this configuration will complete, it is still a very hollow shell. VLC generates a list of enabled modules, and you’ll no doubt notice the shortness of the list at the bottom.

Your goal is to hunt down the “WARNING” flags that the configuration script will throw. I’ve highlighted them in this example.

checking sys/mount.h presence... yes
checking for sys/mount.h... yes
checking arpa/inet.h usability... yes
checking arpa/inet.h presence... yes
checking for arpa/inet.h... yes
checking netinet/in.h usability... yes
checking netinet/in.h presence... yes
checking for netinet/in.h... yes
checking netinet/udplite.h usability... no
checking netinet/udplite.h presence... no
checking for netinet/udplite.h... no
checking sys/eventfd.h usability... no
checking sys/eventfd.h presence... no
checking for sys/eventfd.h... no
checking for net/if.h... yes
checking machine/param.h usability... no
checking machine/param.h presence... no
checking for machine/param.h... no
checking sys/shm.h usability... yes
checking sys/shm.h presence... yes
checking for sys/shm.h... yes
checking linux/version.h usability... yes
checking linux/version.h presence... yes
checking for linux/version.h... yes
checking linux/dccp.h usability... yes
checking linux/dccp.h presence... yes
checking for linux/dccp.h... yes
checking syslog.h usability... yes
checking syslog.h presence... yes
checking for syslog.h... yes
checking whether time.h and sys/time.h may both be included... yes
checking for ssize_t... yes
checking for library containing poll... none required
checking dirent.h usability... yes
checking dirent.h presence... yes
checking for dirent.h... yes
checking for nanosleep in time.h... yes
checking for timespec in sys/time.h... yes
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for MINIZIP... no
checking unzip.h usability... no
checking unzip.h presence... no
checking for unzip.h... no
checking for HAL... no
configure: WARNING: libhal >= 0.5.0 was not found. Install libhal-dev ?
checking for UDEV... no
checking for MTP... no
configure: WARNING: MTP library not found
checking for DBUS... yes
checking for ntohl in sys/param.h... no
checking if gcc -std=gnu99 accepts -Wall... yes
checking if gcc -std=gnu99 accepts -Wextra... yes
checking if gcc -std=gnu99 accepts -Wsign-compare... yes
checking if gcc -std=gnu99 accepts -Wundef... yes
checking if gcc -std=gnu99 accepts -Wpointer-arith... yes
checking if gcc -std=gnu99 accepts -Wbad-function-cast... yes
checking if gcc -std=gnu99 accepts -Wcast-align... yes
checking if gcc -std=gnu99 accepts -Wwrite-strings... yes
checking if gcc -std=gnu99 accepts -Wmissing-prototypes... yes
checking if gcc -std=gnu99 accepts -Wvolatile-register-var... yes
checking if gcc -std=gnu99 accepts -Werror-implicit-function-declaration... yes
checking if gcc -std=gnu99 accepts -pipe... yes
checking if $CC accepts -Os... yes
checking if $CC accepts -O4... yes
checking if $CC accepts -O3... yes
checking if $CC accepts -O2... yes
checking if $CC accepts -O0... yes
checking if $CC accepts -ffast-math... yes
checking if $CC accepts -funroll-loops... yes
checking if $CC accepts -fomit-frame-pointer... yes
checking if $CC accepts -bundle -undefined error... no
checking __attribute__ ((aligned ())) support... 64
checking for __attribute__((packed))... yes
checking execinfo.h usability... yes
checking execinfo.h presence... yes
checking for execinfo.h... yes
checking for backtrace... yes
checking if gcc -std=gnu99 groks MMX intrinsics... yes
checking if gcc -std=gnu99 groks MMX inline assembly... yes
checking if gcc -std=gnu99 groks MMX EXT inline assembly... yes
checking if gcc -std=gnu99 groks SSE2 intrinsics... yes
checking if gcc -std=gnu99 groks SSE inline assembly... yes
checking if gcc -std=gnu99 groks SSE2 inline assembly... yes
checking if gcc -std=gnu99 groks 3D Now! inline assembly... yes
checking whether gcc -std=gnu99 accepts -mtune=athlon64... yes
checking for LUA... no
configure: WARNING: lua5.1 not found, trying lua >= 5.1 instead
checking for LUA... no
checking lua.h usability... no
checking lua.h presence... no
checking for lua.h... no
checking lauxlib.h usability... no
checking lauxlib.h presence... no
checking for lauxlib.h... no
checking lualib.h usability... no
checking lualib.h presence... no
checking for lualib.h... no
checking for luaL_newstate in -llua5.1 ... no
checking for luaL_newstate in -llua51 ... no
checking for luaL_newstate in -llua ... no
configure: WARNING: lua >= 5.1 not found!
checking for LIBPROXY... no
checking for NOTIFY... no
checking for TAGLIB... no
configure: WARNING: TagLib library not found
checking liveMedia_version.hh usability... no
checking liveMedia_version.hh presence... no
checking for liveMedia_version.hh... no
checking liveMedia.hh usability... no
checking liveMedia.hh presence... no
checking for liveMedia.hh... no
configure: WARNING: The development files for liveMedia (live555) can't be found
checking dvdread/dvd_reader.h usability... no
checking dvdread/dvd_reader.h presence... no
checking for dvdread/dvd_reader.h... no
checking libdvdread/dvd_reader.h usability... no
checking libdvdread/dvd_reader.h presence... no
checking for libdvdread/dvd_reader.h... no
checking for dvdnav-config... no
checking libsmbclient.h usability... no
checking libsmbclient.h presence... no
checking for libsmbclient.h... no
checking for struct _SMBCCTX.close_fn... no
checking for dvbpsi/dr.h... no
configure: WARNING: cannot find libdvbpsi headers
checking for dvbpsi_GenSDTSections in -ldvbpsi... no
checking linux/videodev2.h usability... yes
checking linux/videodev2.h presence... yes
checking for linux/videodev2.h... yes
checking for LIBV4L2... no
configure: WARNING: LibV4L2 support disabled because libv4l2 development headers were not found
checking for LIBCDIO... no
configure: WARNING: CD Reading and information library not found
checking for VCDINFO... no
configure: WARNING: VCD information library not found
checking for cdrom_msf0 in linux/cdrom.h... yes
checking for scsireq in sys/scsiio.h... no
checking for ioc_toc_header in sys/cdio.h... no
checking for LIBCDDB... no
configure: WARNING: new enough libcddb not found. CDDB access disabled
configure: WARNING: the dvb access module requires libdvbpsi
checking for inet_pton... yes
checking for inet_ntop... yes
checking ogg/ogg.h usability... yes
checking ogg/ogg.h presence... yes
checking for ogg/ogg.h... yes
checking for oggpack_read in -logg... yes
checking ebml/EbmlVersion.h usability... no
checking ebml/EbmlVersion.h presence... no
checking for ebml/EbmlVersion.h... no
checking libmodplug/modplug.h usability... no
checking libmodplug/modplug.h presence... no
checking for libmodplug/modplug.h... no
checking mpc/mpcdec.h usability... no
checking mpc/mpcdec.h presence... no
checking for mpc/mpcdec.h... no
checking mpcdec/mpcdec.h usability... no
checking mpcdec/mpcdec.h presence... no
checking for mpcdec/mpcdec.h... no
configure: WARNING: only static linking is available, you must provide a gme-tree
checking mad.h usability... yes
checking mad.h presence... yes
checking for mad.h... yes
checking for mad_bit_init in -lmad... yes
checking for AVCODEC... yes
checking libavcodec/avcodec.h usability... yes
checking libavcodec/avcodec.h presence... yes
checking for libavcodec/avcodec.h... yes
checking ffmpeg/avcodec.h usability... no
checking ffmpeg/avcodec.h presence... no
checking for ffmpeg/avcodec.h... no
checking libavutil/avutil.h usability... yes
checking libavutil/avutil.h presence... yes
checking for libavutil/avutil.h... yes
checking ffmpeg/avutil.h usability... no
checking ffmpeg/avutil.h presence... no
checking for ffmpeg/avutil.h... no
checking for AVFORMAT... yes
checking libavformat/avformat.h usability... yes
checking libavformat/avformat.h presence... yes
checking for libavformat/avformat.h... yes
checking ffmpeg/avformat.h usability... no
checking ffmpeg/avformat.h presence... no
checking for ffmpeg/avformat.h... no
checking for libavutil/avutil.h... (cached) yes
checking for ffmpeg/avutil.h... (cached) no
checking for SWSCALE... yes
checking libswscale/swscale.h usability... yes
checking libswscale/swscale.h presence... yes
checking for libswscale/swscale.h... yes
checking ffmpeg/swscale.h usability... no
checking ffmpeg/swscale.h presence... no
checking for ffmpeg/swscale.h... no
checking for POSTPROC... yes
checking libpostproc/postproc.h usability... no
checking libpostproc/postproc.h presence... no
checking for libpostproc/postproc.h... no
checking postproc/postprocess.h usability... no
checking postproc/postprocess.h presence... no
checking for postproc/postprocess.h... no
checking sysfs/libsysfs.h usability... yes
checking sysfs/libsysfs.h presence... yes
checking for sysfs/libsysfs.h... yes
checking libtar.h usability... no
checking libtar.h presence... no
checking for libtar.h... no
checking a52dec/a52.h usability... yes
checking a52dec/a52.h presence... yes
checking for a52dec/a52.h... yes
checking for a52_free in -la52... yes
checking for DCA... no
checking for LIBMPEG2... no
configure: WARNING: Could not find libmpeg2 on your system: you may get it from http://libmpeg2.sf.net/ . Alternatively you can use --disable-libmpeg2 to disable the libmpeg2 plugin.
checking vorbis/codec.h usability... yes
checking vorbis/codec.h presence... yes
checking for vorbis/codec.h... yes
checking vorbis/vorbisenc.h usability... yes
checking vorbis/vorbisenc.h presence... yes
checking for vorbis/vorbisenc.h... yes
checking speex/speex.h usability... yes
checking speex/speex.h presence... yes
checking for speex/speex.h... yes
checking for speex_decode_int in -lspeex... yes
checking for SCHROEDINGER... no
checking png.h usability... yes
checking png.h presence... yes
checking for png.h... yes
checking for png_set_rows in -lpng... yes
checking for X264... yes
checking if linker supports -Bsymbolic... yes
checking for FLUIDSYNTH... no
checking for ZVBI... no
configure: WARNING: ZVBI library not found. Enabling the telx module instead
checking for KATE... no
checking kate/kate.h usability... no
checking kate/kate.h presence... no
checking for kate/kate.h... no
checking for TIGER... no
checking for X... libraries , headers 
checking for gethostbyname... yes
checking for connect... (cached) yes
checking for remove... yes
checking for shmat... yes
checking for IceConnectionNumber in -lICE... yes
checking X11/Xlib.h usability... yes
checking X11/Xlib.h presence... yes
checking for X11/Xlib.h... yes
checking for XShmAttach in -lXext... yes
checking for X11/extensions/dpms.h... yes
checking for DPMSInfo in X11/extensions/dpms.h... yes
checking X11/extensions/Xv.h usability... no
checking X11/extensions/Xv.h presence... no
checking for X11/extensions/Xv.h... no
checking for X11/Xlib.h... (cached) yes
checking GL/glu.h usability... yes
checking GL/glu.h presence... yes
checking for GL/glu.h... yes
checking GL/glx.h usability... yes
checking GL/glx.h presence... yes
checking for GL/glx.h... yes
checking X11/extensions/Xinerama.h usability... yes
checking X11/extensions/Xinerama.h presence... yes
checking for X11/extensions/Xinerama.h... yes
checking for XineramaQueryExtension in -lXinerama_pic... no
checking for XineramaQueryExtension in -lXinerama... yes
checking for X11/extensions/xf86vmode.h... no
checking GL/gl.h usability... yes
checking GL/gl.h presence... yes
checking for GL/gl.h... yes
checking for GL/glu.h... (cached) yes
checking for sdl12-config... no
checking for sdl11-config... no
checking for sdl-config... /usr/bin/sdl-config
checking SDL/SDL.h usability... yes
checking SDL/SDL.h presence... yes
checking for SDL/SDL.h... yes
checking SDL/SDL_image.h usability... no
checking SDL/SDL_image.h presence... no
checking for SDL/SDL_image.h... no
checking SDL_image.h usability... no
checking SDL_image.h presence... no
checking for SDL_image.h... no
configure: WARNING: The development package for SDL_image is not installed.
  You should install it alongside your SDL package.
checking for FREETYPE... yes
checking fontconfig/fontconfig.h usability... yes
checking fontconfig/fontconfig.h presence... yes
checking for fontconfig/fontconfig.h... yes
checking Carbon/Carbon.h usability... no
checking Carbon/Carbon.h presence... no
checking for Carbon/Carbon.h... no
checking for FRIBIDI... yes
checking for XML2... no
checking cascade/graphics/CascadeScreen.h usability... no
checking cascade/graphics/CascadeScreen.h presence... no
checking for cascade/graphics/CascadeScreen.h... no
configure: WARNING: Not building Roku HD1000 compatible video output
checking cascade/graphics/CascadeBitmap.h usability... no
checking cascade/graphics/CascadeBitmap.h presence... no
checking for cascade/graphics/CascadeBitmap.h... no
configure: WARNING: Not building Roku HD1000 compatible video output
checking linux/fb.h usability... yes
checking linux/fb.h presence... yes
checking for linux/fb.h... yes
checking soundcard.h usability... no
checking soundcard.h presence... no
checking for soundcard.h... no
checking sys/soundcard.h usability... yes
checking sys/soundcard.h presence... yes
checking for sys/soundcard.h... yes
checking for main in -lossaudio... no
checking for PULSE... yes
checking alsa/asoundlib.h usability... yes
checking alsa/asoundlib.h presence... yes
checking for alsa/asoundlib.h... yes
checking for main in -lasound... yes
checking deschutes/libraries/hdmachinex225/PCMAudioPlayer.h usability... no
checking deschutes/libraries/hdmachinex225/PCMAudioPlayer.h presence... no
checking for deschutes/libraries/hdmachinex225/PCMAudioPlayer.h... no
checking for UpnpInit in -lupnp... no
checking for QT4... yes
checking for moc-qt4... /usr/bin/moc-qt4
checking for rcc... /usr/bin/rcc
checking for uic-qt4... /usr/bin/uic-qt4
checking Ph.h usability... no
checking Ph.h presence... no
checking for Ph.h... no
checking for BONJOUR... yes
checking for XCB... yes
checking for XCB_KEYSYMS... no
configure: WARNING: XCB keysyms was not found
checking for libgcrypt-config... /usr/bin/libgcrypt-config
checking for LIBGCRYPT - version >= 1.1.94... yes (1.4.1)
checking LIBGCRYPT API version... okay
checking for GNUTLS... yes
checking whether to enable RAOP plugin... yes
checking whether byte ordering is bigendian... no
checking for osso_display_blanking_pause in -losso... no
checking for XSPSetPixelDoubling in -lXsp... no
configure: creating ./vlc-config.in
configure: creating ./config.status
config.status: creating extras/package/win32/vlc.win32.nsi
config.status: creating extras/package/macosx/Info.plist
config.status: creating extras/package/macosx/Resources/English.lproj/InfoPlist.strings
config.status: creating extras/package/macosx/plugin/Info.plist
config.status: creating extras/package/macosx/plugin/InstallerInfo.plist
config.status: creating Makefile
config.status: creating projects/activex/Makefile
config.status: creating projects/activex/axvlc.inf
config.status: creating doc/Makefile
config.status: creating extras/package/ipkg/Makefile
config.status: creating libs/loader/Makefile
config.status: creating libs/srtp/Makefile
config.status: creating libs/unzip/Makefile
config.status: creating modules/Makefile
config.status: creating projects/mozilla/Makefile
config.status: creating m4/Makefile
config.status: creating po/Makefile.in
config.status: creating projects/activex/axvlc_rc.rc
config.status: creating projects/mozilla/npvlc_rc.rc
config.status: creating projects/mozilla/vlc.r
config.status: creating projects/mozilla/install.js
config.status: creating share/Makefile
config.status: creating share/vlc_win32_rc.rc
config.status: creating share/libvlc_win32_rc.rc
config.status: creating compat/Makefile
config.status: creating src/Makefile
config.status: creating src/test/Makefile
config.status: creating bin/Makefile
config.status: creating test/Makefile
config.status: creating modules/access/Makefile
config.status: creating modules/access/bd/Makefile
config.status: creating modules/access/bda/Makefile
config.status: creating modules/access/dshow/Makefile
config.status: creating modules/access/dvb/Makefile
config.status: creating modules/access/mms/Makefile
config.status: creating modules/access/cdda/Makefile
config.status: creating modules/access/rtp/Makefile
config.status: creating modules/access/rtsp/Makefile
config.status: creating modules/access/vcd/Makefile
config.status: creating modules/access/vcdx/Makefile
config.status: creating modules/access/screen/Makefile
config.status: creating modules/access/zip/Makefile
config.status: creating modules/access_output/Makefile
config.status: creating modules/audio_filter/Makefile
config.status: creating modules/audio_filter/channel_mixer/Makefile
config.status: creating modules/audio_filter/converter/Makefile
config.status: creating modules/audio_filter/resampler/Makefile
config.status: creating modules/audio_filter/spatializer/Makefile
config.status: creating modules/audio_mixer/Makefile
config.status: creating modules/audio_output/Makefile
config.status: creating modules/codec/Makefile
config.status: creating modules/codec/avcodec/Makefile
config.status: creating modules/codec/cmml/Makefile
config.status: creating modules/codec/dmo/Makefile
config.status: creating modules/codec/shine/Makefile
config.status: creating modules/codec/subtitles/Makefile
config.status: creating modules/codec/spudec/Makefile
config.status: creating modules/codec/wmafixed/Makefile
config.status: creating modules/codec/xvmc/Makefile
config.status: creating modules/control/Makefile
config.status: creating modules/control/http/Makefile
config.status: creating modules/control/globalhotkeys/Makefile
config.status: creating modules/demux/Makefile
config.status: creating modules/demux/asf/Makefile
config.status: creating modules/demux/avformat/Makefile
config.status: creating modules/demux/avi/Makefile
config.status: creating modules/demux/mkv/Makefile
config.status: creating modules/demux/mp4/Makefile
config.status: creating modules/demux/mpeg/Makefile
config.status: creating modules/demux/playlist/Makefile
config.status: creating modules/gui/Makefile
config.status: creating modules/gui/beos/Makefile
config.status: creating modules/gui/pda/Makefile
config.status: creating modules/gui/macosx/Makefile
config.status: creating modules/gui/maemo/Makefile
config.status: creating modules/gui/minimal_macosx/Makefile
config.status: creating modules/gui/qnx/Makefile
config.status: creating modules/gui/qt4/Makefile
config.status: creating modules/gui/skins2/Makefile
config.status: creating modules/gui/wince/Makefile
config.status: creating modules/meta_engine/Makefile
config.status: creating modules/misc/Makefile
config.status: creating modules/misc/dummy/Makefile
config.status: creating modules/misc/lua/Makefile
config.status: creating modules/misc/memcpy/Makefile
config.status: creating modules/misc/notify/Makefile
config.status: creating modules/misc/testsuite/Makefile
config.status: creating modules/misc/playlist/Makefile
config.status: creating modules/misc/osd/Makefile
config.status: creating modules/misc/stats/Makefile
config.status: creating modules/misc/xml/Makefile
config.status: creating modules/misc/probe/Makefile
config.status: creating modules/mux/Makefile
config.status: creating modules/mux/mpeg/Makefile
config.status: creating modules/packetizer/Makefile
config.status: creating modules/services_discovery/Makefile
config.status: creating modules/stream_filter/Makefile
config.status: creating modules/stream_out/Makefile
config.status: creating modules/video_chroma/Makefile
config.status: creating modules/video_filter/Makefile
config.status: creating modules/video_filter/atmo/Makefile
config.status: creating modules/video_filter/dynamicoverlay/Makefile
config.status: creating modules/video_output/Makefile
config.status: creating modules/video_output/msw/Makefile
config.status: creating modules/video_output/qte/Makefile
config.status: creating modules/video_output/x11/Makefile
config.status: creating modules/visualization/Makefile
config.status: creating modules/visualization/visual/Makefile
config.status: creating modules/visualization/galaktos/Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: creating vlc-config
Enabled modules: a52tofloat32 a52tospdif access_alsa access_mmap access_oss adjust alphamask alsa aout_file aout_sdl atmo audio_format audioscrobbler avcodec avformat bandlimited_resampler blend blendbench bluescreen bonjour canvas cdda chain clone cmml colorthres converter_float crop croppadd dbus deinterlace dolby_surround_decoder dtstospdif dynamicoverlay equalizer erase extract fake fb float32_mixer folder freetype gaussianblur gestures glx gnutls gradient grain headphone_channel_mixer hotkeys http i420_rgb_mmx i420_rgb_sse2 i420_ymga i420_ymga_mmx i420_yuy2 i420_yuy2_mmx i420_yuy2_sse2 i422_i420 i422_yuy2 i422_yuy2_mmx i422_yuy2_sse2 inhibit invert linear_resampler logo magnify marq memcpy3dn memcpymmx memcpymmxext mosaic motion motionblur motiondetect mpgatofixed32 mux_ogg noise normvol ogg opengl opengl osd_parser osdmenu oss panoramix param_eq png podcast postproc psychedelic pulse puzzle qt4 rc remoteosd ripple rotate rss rv32 sap scale scaletempo scene screensaver sharpen shout showintf signals simple_channel_mixer skins2 spatializer spdif_mixer speex stream_out_raop swscale telepathy telnet telx transform unzip v4l2 vcd visual vmem vorbis vout_sdl wall wave x11 x11_screen x264 yuv yuvp yuy2_i420 yuy2_i422 zip 


libvlc configuration
--------------------
version               : 1.0.6
system                : linux
architecture          : x86_64 mmx sse sse2
build flavour         : devel 
vlc aliases           : cvlc rvlc svlc qvlc
plugins/bindings      :

You can tune the compiler flags in vlc-config.
To build vlc and its plugins, type `./compile' or `make'.

What do you think we’re going to do now? That’s right. We’re going to keep looking for software to install from this. Notice in my example that it cannot find the “libdvbpsi” headers. Search synaptic and install them. Repeat ad naseum. This is what I had to install to get this particular configuration script looking prettier (having fewer WARNING flags).

  • liblivemedia-dev
  • libtag1-dev
  • libhal-dev
  • libmtp-dev —> led to libusb-dev
  • liblua5.1-0-dev –> led to 3 others: libltdl3-dev, libreadline5-dev, libtool
  • libdvbpsi4-dev
  • libv4l-0
  • libv4l-dev
  • libcdio-dev
  • libvcdinfo-dev –> led to lib9660-dev
  • libcddb2
  • libcddb2-dev
  • libmpeg2-4-dev
  • zvbi
  • libzvbi0
  • libzvbi-common
  • libzvbi-dev
  • libsdl-image1.2-dev —> led to libtiff4-dev libtiffxx0c2
  • libxcb-keysyms0
  • libxcb-keysyms0-dev

After this, most of the warnings were gone. Some remained, such as support for hardware I didn’t have or for features I simply didn’t care about. However, at this point, most of your dependencies will be installed. Most of the work SHOULD be done :P

Setting up the “full” configuration line

Now we are ready to try a full configuration command, one that specifies what features we do (and perhaps don’t) want installed. If you run the command

:~$ ./configure --help

Then you should have a list of ALL of the different flags and options available to you. Most of them are never really needed, though I’m sure you could have fun trying all sorts of different screwy hacks with various parts of the compilation procedure. The key point here though is that it will tell you which features are enabled and disabled by default. To save you some time, this was the full configuration command I ran:

:~$ ./configure --disable-nls --disable-mozilla --enable-x11 --enable-xvideo --disable-gtk --enable-sdl --enable-avcodec --enable-avformat --enable-swscale --enable-mad --enable-libdvbpsi --enable-a52 --enable-libmpeg2 --enable-dvdnav --enable-faad --enable-vorbis --enable-ogg --enable-theora --enable-faac --enable-mkv --enable-freetype --enable-fribidi --enable-speex --enable-flac --enable-live555 --with-live555-tree=/home/preston/live --enable-caca --enable-skins --enable-skins2 --enable-alsa --disable-kde --enable-qt4 --enable-ncurses --enable-release --enable-snapshot --enable-dbus-control --enable-shout --enable-taglib --enable-x264 --enable-v4l --enable-cddax --enable-vcdx --enable-realrtsp --enable-xvmc --enable-svg --enable-dvdread --enable-twolame --enable-real --enable-flac --enable-tremor --with-ffmpeg-mp3lame --with-ffmpeg-faac --enable-quicktime --enable-dirac 

The following

  • –disable-nls
  • –disable-mozilla

Are required to be disabled. If you don’t, then the configuration line won’t complete.

As well, as the configuration scripts change with each release, certain flags might not exist any more. VLC’s configuration –though not necessarily other softwares’ configuration scripts– will tell you which flags it doesn’t recognize. There are a few up there in my configuration line that aren’t recognized and as such don’t do anything (like “–disable-gtk”). You can leave them in the configuration command or take them out; it is, as far as I know, irrelevant.

Getting the “full” configuration line to “complete”

Now that you have all of the relevant features enabled or disabled, you are going to once again repeat the process you did the first two times, hunting for warning flags and other issues that prevent the configuration from properly completing. I personally had to install the libdvdread headers. Other than that, the configuration completed with a nice long list of modules ready to be installed. It then gave me the go ahead to try the “make” command.

Notes about software that is “too old”

When I went through this process, the configuration script complained that my livemedia packages (live-555) were too old. The error looked like this:

[MORE OF CONFIGURATION OUTPUT ABOVE]
checking liveMedia_version.hh usability... yes
checking liveMedia_version.hh presence... yes
checking for liveMedia_version.hh... yes
checking for liveMedia version >= 1214895600 ... no
configure: error: Your version of liveMedia is too old: you may get a more recent one from http://www.live555.com/liveMedia.
Alternatively you can use --disable-live555 to disable the liveMedia plugin.

If this is the case, then you ought to remove the repository version and install the latest if you think it is necessary or worth it. That is what I did. Go ahead and jump down to Part 4 if you want a guide on how to do so.

Part 3: The “make” command ; fixing errors that occur in this stage

This is the point where you hope a whole bunch of gibberish goes rushing past without stopping until saying something along the lines of being successfully installed. Of course, it doesn’t always work that way. There were two issues I encountered:

  1. Missing header files
  2. Improperly compiled supporting software

Missing Header Files

Perfect evidence that even the best configuration files can be thwarted –I’d presume by faulty assumptions that the installation of one package means that such a header file would HAVE to be installed on the machine. Can’t say for sure. Regardless, when I first ran the “make” command, I got this error:

[LOTS OF GIBBERISH ABOVE (relating to the "cdda" module)]
In file included from access.c:30:
cdda.h:70:27: error: cdio/paranoia.h: No such file or directory
In file included from access.c:30:
cdda.h:104: error expected specifier-qualifier-list before 'paranoia_mode_t'
access.c: In function 'get_audio_position':
access.c:170: error: 'cdda_data_t' has no member named 'b_audio_ctl'
access.c:181: error: 'cdda_data_t' has no member named 'b_nav_mode'
[MORE ERROR MESSAGES BELOW]

If you’ve ever written code before, then you’ll know better than to try fixing the last error. The rule is that you hunt down the very FIRST error, and solve IT’S complaint. The list of errors the compiler spits out will almost always originate from the first error. This case is no exception; the “access.c” errors like “has no member named” are symptoms of the first error:

cdda.h:70:27: error: cdio/paranoia.h: No such file or directory

If it cannot find the header file (“paranoia.h”) , than the source code (“access.c”) will of course be unable to resolve the pieces that came from the header.

I had to try a few different packages from synaptic to get this to go away. I installed them in this order:

  1. libcdio-cdda-dev –> libcdio-cdda0 [tried since the problem occured in the cdda module; FAILED]
  2. libcdparanoia-dev [tried since it was a paranoia development file; FAILED]
  3. libcdio-paranoia-dev —> libcdio-paranoia0 [tried since it was a more specific development file including the input/output in the filename; SUCCESS]

After installing the “libcdio-paranoia-dev” file, this error went away and VLC continued to compile.

Improperly compiled supporting software

I had compiled the latest livemedia from source, but apparently, VLC didn’t like how I did it. I got issues like this:

[MORE STUFF ABOVE RELATING TO COMPILING LIVEMEDIA]
/usr/bin/ld: /home/preston/live/liveMedia/libliveMedia.a(Media.o): relocation R_X86_64_32S against 'vtable for Medium' can not be used when making a shared object; recompile with -fPIC
/home/preston/live/liveMedia/libliveMedia.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[5]: *** [liblive555_plugin.la] Error 1
make[5]: Leaving directory '/home/preston/vlc-1.0.6/modules/demux'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory '/home/preston/vlc-1.0.6/modules/demux'
make[3]: *** [all] Error 2
make[3]: Leaving directory '/home/preston/vlc-1.0.6/modules/demux'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/home/preston/vlc-1.0.6/modules/'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/preston/vlc-1.0.6'
make: *** [all] Error 2

As it turns out, this is apparently a consequence of using a 64 bit operating system. “-fPIC” is a compiler option, something you can tell the compiler to do to your code when compiling it that makes it easier for other software to then use your code. But how do we fix our livemedia installation to use fpic? Well, you need to recompile livemedia with the “-fpic” compiler option. It turns out that livemedia makes this a (relatively) painless process. Read part four.

Part 4: Installing Live-555 and Solving the “recompile with -fPIC” Issue

I don’t actually use this plugin. However, I thought it would be a good idea to practice compiling other supporting software when using the repositories wasn’t sufficient.

Installing correctly

The website gives instructions on how to install.

Download from here:

http://www.live555.com/liveMedia/public/

A filename like “live.2010.07.13.tar.gz” is what you’ll want from that page.

Now, run the following command inside the live directory:

username@computer:~/live$ ./genMakefiles linux

You may notice on the website that the developer says you might need to tweak certain files. Tweak the one called “config.linux” to look like this:

COMPILE_OPTS =		$(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -fPIC
C =			                c
C_COMPILER =		cc
C_FLAGS =		        $(COMPILE_OPTS)
CPP =			        cpp
CPLUSPLUS_COMPILER =c++
CPLUSPLUS_FLAGS =	$(COMPILE_OPTS) -Wall -DBSD=1 -Wno-deprecated
OBJ =			        o
LINK =			        c++ -o
LINK_OPTS =		        -L.
CONSOLE_LINK_OPTS =	$(LINK_OPTS)
LIBRARY_LINK =		ar cr 
LIBRARY_LINK_OPTS =	
LIB_SUFFIX =			a
LIBS_FOR_CONSOLE_APPLICATION =
LIBS_FOR_GUI_APPLICATION =
EXE =

I highlighted the lines where I made changes. In the first line, I added the “-fPIC” option so that VLC won’t whine when using it. As a result, livemedia will be compiled with “-fPIC” and VLC will be able to use the code. The website also suggested adding “-Wno-deprecated” to the CPLUSPLUS_FLAGS if your gcc is 3.0 or greater (mine is). I did, and didn’t notice any difference; you’re probably fine not adding it if you don’t want to.

Now, for once, the procedure is as simple as:

username@computer:~/live$ ./configure
username@computer:~/live$ make
username@computer:~/live$ su
username@computer:~/live# make install

Fixing an improper install

Supposing you didn’t add the “-fPIC” flag where you were supposed to. First, execute the following commands in the livemedia directory:

:~$ make clean
:~# make uninstall [may or may not actually work; i can't remember if livemedia has this option or not; if not, don't worry about it. just do the "make clean" and go back to the first section of part four]

Now, go back up to the first section of part four and install as shown. The problem will be resolved.

Part 5: The “make install” Command and Troubleshooting

If you’ve made it this far, congratulations. Chances are, your software is good to go. Assuming that the “make” command completes without errors, then you are ready to install the software by executing this command:

:~# make install

This puts all of the appropriate executables in the right directories and such. I’d also recommend doing this to update the dynamic libraries before running the software:

:~# ldconfig

Now try running vlc:

:~$ vlc

It will probably tell you that you have a buggy glibc version. However, it should still run just fine :-)

How to add features you forgot to include in the ./configure line or have since installed

So, you finally have the program working. It can even read all of your files! Oh, wait… it doesn’t read a certain type. Don’t panic. It happened to me. It wouldn’t open files that were in matroska containers (“*.mkv” files). If this happens, do the following in the vlc directory:

:~$ make clean
:~# make uninstall

Now, since I wasn’t able to play matroska containers, I installed the following packages from synaptic:

  • libmatroska-dev
  • libebml-dev

I then reinstalled vlc with the “./configure” command I used before (the one with all of the enable/disable switches), then “make” and “make install”. I once again executed “ldconfig” as root, and I then had a fully functional VLC media player.

Conclusion

Congratulations. You now have the second latest VLC out there :-)

3 Comments »

  1. I’ve recently started a blog, the information you provide on this site has helped me tremendously. Thank you for all of your time & work.

    Comment by physician assistant — July 18, 2010 @ 6:02 pm


RSS feed for comments on this post.

Leave a Reply

Your email address will not be published. Required fields are marked *

6,874 Spambots Blocked by Simple Comments

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>