> On Mar 12, 2025, at 16:34, Gyan Doshi <ffm...@gyani.pro> wrote:
> 
> 
> 
> On 2025-03-12 01:29 pm, Martin Storsjö wrote:
>> On Wed, 12 Mar 2025, Gyan Doshi wrote:
>> 
>>> The linker command can exceed the maximum argument limit on MinGW,
>>> especially for libavcodec.
>>> 
>>> The objects list is now stored in a file and passed to the linker.
>>> ---
>>> ffbuild/library.mak | 4 +++-
>>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>> 
>>> diff --git a/ffbuild/library.mak b/ffbuild/library.mak
>>> index 793e9d41fa..781b018e00 100644
>>> --- a/ffbuild/library.mak
>>> +++ b/ffbuild/library.mak
>>> @@ -66,8 +66,10 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR)
>>> 
>>> $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SLIBOBJS) 
>>> $(SUBDIR)lib$(NAME).ver
>>>     $(SLIB_CREATE_DEF_CMD)
>>> -    $$(LD) $(SHFLAGS) $(LDFLAGS) $(LDSOFLAGS) $$(LD_O) $$(filter %.o,$$^) 
>>> $(FFEXTRALIBS)
>>> +    $(Q)echo $$(filter %.o,$$^) > $$@.objs
>>> +    $$(LD) $(SHFLAGS) $(LDFLAGS) $(LDSOFLAGS) $$(LD_O) @$$@.objs 
>>> $(FFEXTRALIBS)
>>>     $(SLIB_EXTRA_CMD)
>>> +    -$(RM) $$@.objs
>> 
>> Don't we need do the same for static libraries too?
>> 
>> On first glance, this looks quite reasonable... However, the limit that is 
>> an issue is the length of a command line. The .objs file is written with an 
>> "echo" command - doesn't that fundamentally also hit the same limit (just a 
>> little bit later, as there are fewer command line flags in this command)?
>> 
>> Or do we assume that make executes it with a shell, where the shell handles 
>> "echo" as a shell builtin so that it doesn't actually spawn a subprocess for 
>> this? Can you test it, if you could extend the list of object files to the 
>> point where the .objs file is clearly over 32 KB, and verify that it did 
>> include all the files you intended?
> 
> The specific error I got when building a shared build of 7.1.1 (with ~90 
> external libs) was
> 
> /bin/sh: line 1: /mingw64/bin/ccache: Argument list too long

I have got the same error from user’s report, but I cannot reproduce the error 
by myself.

FYI, there is a meson port of ffmpeg in gstreamer. It’s about five times faster 
than configure+make on Windows. Maybe not a ready for build and release binary, 
but can save a lot of time when developing and test.

https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg

> 
> Got same error without ccache.
> 
> The static build of the same config succeeded without any patching.
> The .objs file generated for libavcodec shared build is 29KB.
> 
> How do I inflate the size to above 32K? I've enabled pretty much everything I 
> can.
> 
> 
>> Secondly, less fundamental - even if we try to remove the .objs file here at 
>> the same time it's quite possible for it to be left behind (e.g. if the 
>> linking command fails) - so it would be good to make sure that it is removed 
>> on "make clean" too.
>> 
>> Plus we probably should include it in .gitignore, if someone does in-tree 
>> builds.
> 
> Will add both.
> 
> Regards,
> Gyan
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to