> 2014/09/11 4:07PM Clément Bœsch wrote: 
> 
> On Thu, Sep 11, 2014 at 12:23:35PM +0900, Kimio Miyamura wrote:
>> 
>>> 2014/09/01 4:05PM Clément Bœsch <u...@pkh.me> wrote: 
>>> 
>>> On Mon, Sep 01, 2014 at 03:39:08PM +0900, Kimio Miyamura wrote:
>>>> 
>>>>> On 2014/09/01, at 2:11PM, Clément Bœsch <u...@pkh.me> wrote:
>>>>> 
>>>>>> On Mon, Sep 01, 2014 at 10:02:58AM +0900, Kimio Miyamura wrote:
>>>>>> 
>>>>>> I searched web and found that modification of ffmpeg configure script is 
>>>>>> required: 
>>>> 
>>>>>> -enabled libmodplug        && require libmodplug libmodplug/modplug.h 
>>>>>> ModPlug_Load -lmodplug
>>>>>> +enabled libmodplug        && require libmodplug libmodplug/modplug.h 
>>>>>> ModPlug_Load -lmodplug -lstdc++
>>>>>> 
>>>>>> or
>>>>>> 
>>>>>> -enabled libmodplug        && require libmodplug libmodplug/modplug.h 
>>>>>> ModPlug_Load -lmodplug
>>>>>> +enabled libmodplug        && require libmodplug libmodplug/modplug.h 
>>>>>> ModPlug_Load -lmodplug -lc++
>>>> 
>>>>>> I think either of them should be added to ffmpeg compile script.  How do 
>>>>>> you think?
>>>> 
>>>>> Does -lstdc++ or -lc++ appears in pkg-config --libs libmodplug?
>>>> 
>>>> $ pkg-config --libs libmodplug
>>>> -L/Volumes/ffmpeg_compile/lib -lmodplug
>>>> 
>>>> So either -lstdc++ or -lc++ don't appear in the command output.  
>>>> 
>>>> I checked libmodplug.pc.  
>>>> 
>>>> $ cat /Volumes/ffmpeg_compile/lib/pkgconfig/libmodplug.pc 
>>>> prefix=/Volumes/ffmpeg_compile
>>>> exec_prefix=${prefix}
>>>> libdir=${exec_prefix}/lib
>>>> includedir=${prefix}/include
>>>> 
>>>> Name: libmodplug
>>>> Description: The ModPlug mod file playing library.
>>>> Version: 0.8.8.5
>>>> Requires: 
>>>> Libs: -L${libdir} -lmodplug
>>>> Libs.private: -lstdc++ -lm
>>>> Cflags: -I${includedir}
>>>> 
>>>> -lstdc++ appears in Libs.private: line.  But even though configure with 
>>>> "./configure --pkg-config-flags=--static --enable-libmodplug", the result 
>>>> is same error.  
>>>> 
>>> 
>>> Right, that's because libmodplug wasn't detected through pkg-config, which
>>> I just fixed in git/master. Can you git pull and retry that latest command
>>> with --pkg-config-flags=--static?
>> 
>> A information for Windows (MinGW?) user.  
>> 
>> With above ffmpeg change, Windows (MinGW?) user encounters libmodplug not 
>> found error when configuring ffmpeg with libmodplug-0.8.8.5.  
>> This is because of mod plug.h's              MODPLUG_EXPORT macro.  The 
>> macro is defined as __declspec(dllimport) would be added, without defining 
>> MODPLUG_STATIC.  
> 
> Can you explain how this is different from before the pkg-config patch?

There are no difference in mod plug.h between pkg-config patch and before.  
To build ffmpeg (Before pkg-config patch) with libmodplug support, Windows user 
modified ffmpeg configure script as my first message.  They added -lstdc++ to 
enabled libmodplug line as workaround.  

-enabled libmodplug        && require libmodplug libmodplug/modplug.h 
ModPlug_Load -lmodplug
+enabled libmodplug        && require libmodplug libmodplug/modplug.h 
ModPlug_Load -lmodplug -lstdc++

>> Then, called as `_imp__ModPlug_Load' from ffmpeg configure, and then result 
>> in libmodplug not found error.  (I'm not Windows user.  I'm writing the 
>> error mechanism based on one of my friend's comment who using Windows)
> 
>> The countermeasure is either of bellow 3.
>> 1.Define MODPLUG_STATIC in modplug.h.
> 
> What is the consequence of this when it's not static?

Yes it's a workaround for ffmpeg static building.  If build ffmpeg as shared, 
this workaround is not needed.  

>> 2.Add "-DMODPLUG_STATIC" to Cflags: -I${includedir} line in libmodplug.pc.
> 
> Sounds like you have to add this to Cflags.private or something so it's
> raised with --static. You need to see this with mod plug itself

You are right, but this is a workaround for ffmpeg static building too.  It 
does not mean that libmodplug.pc should be changed in it's source code.  

>> 3.Configure ffmpeg with adding "--extra-cflags=-DMODPLUG_STATIC" option.
> 
> We indeed currently do #define MODPLUG_STATIC in the
> libavformat/libmodplug.c itself, so it should probably be in the configure
> test as well. Unfortunately, I'm not sure how this actually affects the
> linking when only a shared version of the library is available. Also, I
> don't understand how this previously worked, because the configure test
> never had it.


In fact, the error in Windows is not related with ffmpeg.  It is derived from 
macro in modplug.h.  Here   , I pickup central of this issue: 

01 #if defined(_WIN32) || defined(__CYGWIN__)
02 # if defined(MODPLUG_BUILD) && defined(DLL_EXPORT)   /* building libmodplug 
as a dll for windows */
03 #   define MODPLUG_EXPORT __declspec(dllexport)
04 # elif defined(MODPLUG_BUILD) || defined(MODPLUG_STATIC)     /* building or 
using static libmodplug for windows */
05 #   define MODPLUG_EXPORT
06 # else
07 #   define MODPLUG_EXPORT __declspec(dllimport)                      /* 
using libmodplug dll for windows */
08 # endif
09 /* FIXME: USE VISIBILITY ATTRIBUTES HERE */
10 #elif defined(MODPLUG_BUILD)
11 #define MODPLUG_EXPORT
12 #else
13 #define MODPLUG_EXPORT
14 #endif

You may see that without MODPLUG_STATIC definition, "_imp__" prefix is added to 
function name.  All 3 countermeasure are workaround to avoid "_imp__" prefix 
addition.


// Miya

_______________________________________________
ffmpeg-user mailing list
ffmpeg-user@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-user

Reply via email to