[FFmpeg-devel] Fix mingw name of .lib files

Gonzalo Garramuño ggarra
Wed Mar 5 05:01:02 CET 2008


M?ns Rullg?rd wrote:
> 
> I hate autotools because maintaining an autoconf/automake based build
> system requires more effort than writing configure scripts and
> makefiles by hand.  I'm speaking out of personal experience here.
> 

That I agree.  You have my sympathy if you need to maintain something 
with autotools.  However these days there are other competing build 
systems.  There's cmake (ugly syntax, but probably the more robust), 
scons (python based somewhere in between), premake (tiny lua based for 
small projects), etc.
All of them are multi-platform (including native microsoft windows 
toolchains, which is autotools real Achilles heel).  Cmake, afaik, is 
really the only one with pretty solid cross-compiler support.

>>> Xiph are also not to be trusted.
>> Okay, I'll play along.  Who is to be trusted other than yourself?
> 
> Anyone who does things the simple, Unix way.
> 

I was looking for an example project that builds libraries like ffmpeg 
does to understand the merits.

> 
> Intended to allow multiple installed dll versions, without
> complicating life for those wishing to link new apps with our
> libraries.
> 

Okay.  So what happens when the API breaks (which in the time I've been 
monitoring ffmpeg has already happened)?  If you are linking against a 
non-versioned lib, all *might* work.  But it might also lead to 
unexplicable crashes.

I certainly prefer the failure to become obvious rather than getting a 
user telling me their software crashes but used to work some other week.

> If memory serves, attempting to run a Windows application with dlls
> missing, will result in a message telling the user exactly which dlls
> are required.  In the case libavcodec, that would be the versioned
> name.
> 

*IF* you link against the versioned name (which is what I'm *trying* to 
do easily) but not what you are proposing by having the .lib name being 
unversioned.

The whole issue is that I'm trying to automate the release and I can't 
because for linking with the microsoft compiler/mingw, you need to find 
the lib file but for release you need to ship the correct DLL.  As the 
lib name has no useful version, how am I to ship the right DLL?  Things 
will only get worse if, as you say, I need to support multiple versions. 
  You are assuming versions just increase and you never have to support 
older versions.  Every time I compile ffmpeg, the avcodec.lib gets 
overwritten.  In a couple of months, I would then have no idea which 
version it belongs to anymore.

>> You keep repeating that but fail to provide an example of how this
>> is helpful or why symlinks are not an acceptable (and much simpler)
>> solution.
> 
> Last I checked, Windows had no notion of symlinks.
> 

Kind of.  There is something now for the past few years.  It is a pseudo 
symlink called junctions since NT Server something.  XP has that too. 
Vista improves upon that more and calls them symlinks (albeit they are 
not).
It is still not as good as unix symlinks but it might get there someday 
:).  For file symlinks the big issue is that it has a limit on 32 
symlinks per directory (yes, I know --- yuck).

For mingw it really does not matter, as symlinks uses an old microsoft 
runtime and they are still treated as hard links.  cygwin used to treat 
symlinks as entries into its mount table in /etc/fstab and file symlinks 
like mingw, IIRC.

Overall, as the one doing the Makefile, do you care?  You just write "ln 
-s".  What the underlying OS does with that it is up to the OS. 
Hopefully, you get a symlink.  If not, well, worse that happens is you 
get a hard link or a copy of the file.

-- 
Gonzalo Garramu?o
ggarra at advancedsl.com.ar

AMD4400 - ASUS48N-E
GeForce7300GT
Xubuntu Gutsy




More information about the ffmpeg-devel mailing list