[FFmpeg-devel] [PATCH] Made minor changes to get the decklink avdevice code to build using Visual C++

Aaron Levinson alevinsn at aracnet.com
Thu Apr 13 23:09:10 EEST 2017


On 4/13/2017 3:55 AM, Hendrik Leppkes wrote:
> On Thu, Apr 13, 2017 at 12:39 PM, Aaron Levinson <alevinsn at aracnet.com> wrote:
>> On 4/13/2017 12:36 AM, Hendrik Leppkes wrote:
>> diff --git a/configure b/configure
>> index a383bf2..9a06437 100755
>> --- a/configure
>> +++ b/configure
>> @@ -4843,8 +4843,6 @@ case $target_os in
>>          else
>>              target_os=mingw32
>>          fi
>> -        decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
>> -        decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
>>          LIBTARGET=i386
>>          if enabled x86_64; then
>>              LIBTARGET="i386:x86-64"
>> @@ -5946,6 +5944,19 @@ if ! disabled sdl2; then
>>  fi
>>  enabled sdl2 && enable sdl && add_cflags $sdl2_cflags && add_extralibs $sdl2_libs
>>
>> +if enabled decklink; then
>> +    case $target_os in
>> +        mingw32*|mingw64*)
>> +            decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
>> +            decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
>> +            ;;
>> +        win32|win64)
>> +            decklink_outdev_extralibs="-lole32 -loleaut32"
>> +            decklink_indev_extralibs="-lole32 -loleaut32"
>> +            ;;
>> +    esac
>> +fi
>> +
>
> Whats in the extralibs before this block that you need to clear out in
> the msvc case?
> Maybe that part should just be set conditionally so we can unify this,
> and don't set something we need to strip out again after.
>
> - Hendrik

decklink_outdev_extralibs and decklink_indev_extralibs are declared as 
follows earlier in configure:

decklink_indev_extralibs="-lstdc++"
decklink_outdev_extralibs="-lstdc++"

This is done in the standard section where 
<library>_<indev|outdev>_<extralibs|deps> can be found.

libstdc++ is needed when building the Decklink source files with gcc/g++ 
because of, at a minimum, the use of STL in one of the .cpp files.

For builds targeting Windows, -lole32 and -loleaut32 are also needed 
because of the use of COM.  So, that explains why -lole32 and -loleaut32 
are added for both mingw and Windows.

Finally, when building with the Microsoft compiler (cl.exe), libstdc++ 
is not needed and actually can't be found.  The C/C++ run-time is 
included by default in some form when building with cl.exe unless the 
-nodefaultlib linker option is used.  So, that explains why it replaces 
the extralibs variables with just -lole32 and -loleaut32 for Windows 
builds.  Note that win32 to specified as the target_os when an msvc 
build is done, and it may be the only case when target_os is set to 
win32 unless the user manually sets it as an option when invoking configure.

-lole32 and -loleaut32 is likely relevant for both cygwin and the Intel 
compiler, but it should be a simple matter to add those later if anyone 
uses those for building.  The elimination of -lstdc++ may also be 
relevant for the Intel compiler but probably only when using the Intel 
compiler on Windows.

Anyway, I don't think an approach that moves -lstdc++ into the above if 
block is any better or worse than the patch in its current form, and the 
patch in its current form results in fewer changes to configure than a 
patch that moves -lstdc++ around.

Aaron


More information about the ffmpeg-devel mailing list