gccffmpegldundefined-symbol

Ffmpeg compilation fails due to undefined symbol _x264_encoder_open_112 for architecture x86_64


I am compiling ffmpeg on Snow Leopard from source. Using Macport is not an option since I have some custom modification in ffmpeg. The make commands are:

$ ./configure --enable-gpl --enable-libmp3lame --enable-static \
            --disable-shared --enable-libx264 --enable-pthreads \
            --disable-doc --enable-avfilter
$ make

The error:

CC  ffplay.o
ffplay.c: In function ‘SDL_main’:
ffplay.c:3157: warning: assignment discards qualifiers from pointer target type
LD  ffplay_g
Undefined symbols for architecture x86_64:
  "_x264_encoder_open_112", referenced from:
      _X264_init in libavcodec.a(libx264.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [ffplay_g] Error 1

I have compiled libx264 from source, which went fine.

$ cd x264-snapshot-20101228-2245; ./configure && make && sudo make install

... and it contains the symbol "_x264_encoder_open_112"

$ nm ./libx264.a | grep _x264_encoder_open_112
0000000000003ef0 T _x264_encoder_open_112
000000000000d7b0 S _x264_encoder_open_112.eh

What might be going wrong?


Solution

  • There was a conflict between similarly named libs from /opt/local/lib and /usr/lib. The former is maintained by Macport and the latter was my own dev area. Since I wanted to use the latter location, I had to remove / temporarily rename the ones in /opt/local/lib to force gcc to pick them up from /usr/lib

    In your case, the paths may vary, but you get the idea.

    If you have a cleaner way to achieve this, I am all ears