On 3/11/14 7:45 PM, Jason Blum wrote:
Once you do that and you get linker errors, paste those
to pastebin and link here I guess.
The order of the linking makes a difference between the types of
undefined reference errors that I'm getting.

If I use:

g++ -g -D__STDC_CONSTANT_MACROS -L/usr/local/lib/ -lswscale -lavformat
-lavcodec main.cpp

it results in the following: http://pastebin.com/LtJzA7Hj

If I use:

g++ main.cpp -g -D__STDC_CONSTANT_MACROS -L/usr/local/lib/ -lswscale
-lavformat -lavcodec

it results a 16000 line long error output too large for free PasteBin.
The abridged version: http://pastebin.com/8dsv2pMY

I don't really understand linking order issues, but I would have
guessed at least one of the orders would have worked. If I don't
include the -D__STDC_CONST_MACROS flag, one of the header files
complains, so I think it is including the headers, which are in
/usr/local/include.

Any ideas what I'm missing?
Compile the main.cpp into an object file first, and then, link order should be main.o and then all the libraries. I am not sure about the behavior of the compiler in this case and I think that it should "do the right thing", but to guarantee the proper linking order, build main into an object file, then link them all with main.o as the first in the list.

When linking, the linker maintains a master symbol table as it reads in objects and libraries. Symbols from libraries are only included in the master symbol table if there have been prior references to them. Symbols from object files are included automatically. main.o will reference everything needed from the libraries. So a linker call with main.o followed by a pkg-config --libs ffmpeg (see below) should stand up the appropriate linker line.

Refer to doc/examples/Makefile. Here, simple example programs are built against ffmpeg libraries. In this example, pkg-config is used to stand up the proper compiler and linker flags. I'll admit, I don't know where in this makefile the actual compiler call is made, but notice how the makefile builds a list of object filenames. In this makefile, pkg-config will find your systemwide installed .pc files, so if you wish to use locally built copy, .pc files are provided in a subdirectory of the installed location, and using pkg-config with an explicit path to these pc files "I believe" will let pkg-config stand up the args for your local ffmpeg libs.

--
Joshua Kordani
LSA Autonomy

_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to