[Libav-user] segmentation fault on avcodec_decode_video2( ) call
Joshua Kordani
jkordani at lsa2.com
Wed Mar 12 16:20:03 CET 2014
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20140312/91c24836/attachment.html>
More information about the Libav-user
mailing list