Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where is libavformat for FFMpeg located on Snow Leopard?

Having an issue with getting a makefile to find the correct libraries and header files for a .c program I'm trying to compile. I'm trying to compile an open source segmenter for Apple's HTTP Live Streaming and it requires libavformat and other FFMpeg libraries to compile. I used Mac Ports to install FFMpeg and when I run "which ffmpeg" at command line, the directory it shows is opt/local/bin/ffmpeg, but after searching around, this doesn't seem to be the directory with the libraries.

It seems that the libraries are located in opt/local/include because that is where I see the header files. Here is my makefile with the suspected directory:

all: gcc -Wall -g live_segmenter.c -o live_segmenter -I/opt/local/include -I/opt/local/bin -I/opt/local/include/libavutil -L/opt/local/include/libavformat -libavformat -L/opt/local/include -libavcodec -L/opt/local/include -libavutil -L/opt/local/include -libavcore -lbz2 -lm -lz -lfaac -lmp3lame -lx264 -lfaad -lpthread

clean:
rm -f live_segmenter

And here is the output after trying to compile:

gcc -Wall -g live_segmenter.c -o live_segmenter -I/opt/local/include -I/opt/local/bin - I/opt/local/include/libavutil -L/opt/local/include/libavformat -libavformat -L/opt/local/include -libavcodec -L/opt/local/include -libavutil -L/opt/local/include -libavcore -lbz2 -lm -lz -lfaac -lmp3lame -lx264 -lfaad -lpthread

ld: library not found for -libavformat
collect2: ld returned 1 exit status
make: *** [all] Error 1

I also tried running "ffmpeg -version" to see if ffmpeg was built correctly and it seems to be so I have run out of ideas on what to do. Any help or point in the right direction would be great. Thank you!


1 Answers

I think you have too many -I and not enough -L. From gcc(1) on Lion:

-I dir 
   Add the directory dir to the list of directories to be searched for 
   header files.  Directories named by -I are searched before the standard
   system include directories.  If the directory dir is a standard system 
   include directory, the option is ignored to ensure that the default
   search order for system directories and the special treatment of system
   headers are not defeated.

 -L dir
   Add directory dir to the list of directories to be searched for -l.

-l<libname> is a linker directive that tells ld to include lib<libname> from wherever in the -L directory list.

Try this, instead:

gcc -Wall -g live_segmenter.c -o live_segmenter -I/opt/local/include -L/opt/local/lib -lavcodec -lavutil -lavcore -lbz2 -lm -lz -lfaac -lmp3lame -lx264 -lfaad -lpthread

like image 91
James Felix Black Avatar answered Oct 21 '25 12:10

James Felix Black