[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