On Fri, Jul 18, 2008 at 02:26:20AM +0200, Stephan Beyer wrote: > > Dmitry Potapov wrote: > > diff --git a/shell.c b/shell.c > > index b27d01c..91ca7de 100644 > > --- a/shell.c > > +++ b/shell.c > > @@ -3,6 +3,14 @@ > > #include "exec_cmd.h" > > #include "strbuf.h" > > > > +/* Stubs for functions that make no sense for git-shell. These stubs > > + * are provided here to avoid linking in external redundant modules. > > + */ > > +void release_pack_memory(size_t need, int fd){} > > +void trace_argv_printf(const char **argv, const char *fmt, ...){} > > +void trace_printf(const char *fmt, ...){} > > + > > + > > I don't really understand why this works. > You redefine libgit.a functions here > > So the linker should complain like that: > libgit.a(sha1_file.o): In function `release_pack_memory': > /home/sbeyer/src/git/sha1_file.c:624: multiple definition of `release_pack_memory' > shell.o:/home/sbeyer/src/git/shell.c:9: first defined here > collect2: ld returned 1 exit status > > And, in fact, it does when I move a function from a builtin to a lib > source file, for example launch_editor() from builtin-tag.c to strbuf.c, > like the following one: It works because these functions are defined in object files, so the linker should not search for them in libraries. However, if the linker is forced to link sha1_file.c for some other reason, you will get the conflict. Dmitry -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html